我知道这个问题听起来像是重复的,但事实并非如此。关于Weka中此错误的其他问题都无法解决我的问题,它们与arff文件有关。我正在使用文本文件。 在Eclipse中成功使用Weka之后,我想将其用于Android应用程序。因此,我正在设备的内部存储器中创建和存储文件,并且能够读取文件。 这就是我创建文件的方式:
String filename = "mydata";
String relation = "@relation mydata";
String attributes = "\n@attribute cheek numeric\n\n" +
"@attribute eye numeric\n" +
"@attribute mouth numeric\n" +
"@attribute nose numeric\n" +
"@attribute name {0, 1, 2}";
String data = "\n\n@data\n" +
"58.319244, 35.185467, 28.329004, 19.908704, 0\n" +
"64.63182, 36.4422 , 30.721794, 20.632916, 1" + "\n" +
"65.45019, 36.28883, 27.934803, 26.095049, 2";
FileOutputStream outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
outputStream.write((relation + attributes + data).getBytes());
outputStream.close();
当我从文件中读取时,它是这样的:
@relation mydata
@attribute cheek numeric
...
@data
58.319244, 35.185467, 28.329004, 19.908704, 0
...
我得到的错误是:
java.io.IOException:文件的结尾过早,请读取Token [EOF]第1行
错误发生在最后一行:
FileInputStream fis = getApplication().openFileInput("practice");
InputStreamReader isr =新的InputStreamReader(fis); BufferedReader bufferedReader = new BufferedReader(isr); 合并实例数=新实例数(bufferedReader);
我已经花了很多时间来查找此错误,但无法找出解决方案。再一次,我没有保存这个arff文件,我认为它是另存为文本文件。我还认为错误与获取BufferedReader
并将其传递到Instances
构造函数有关。
有人可以帮助我解决这个问题吗?我在Eclipse中使用了具有类似结构的文本文件,但现在在Android中,它给了我这个错误。
我找到了解决问题的方法,并将其发布在下面。问题在于将文件读入BufferedReader
。
答案 0 :(得分:0)
通过采用另一种方法从BufferedReader
获取File
的方法,我使其能够工作。以下代码使用内部存储器中文件的数据成功创建了BufferedReader
,然后可以在Instances
构造函数中使用它。
String yourFilePath = getApplicationContext().getFilesDir() + "/" + "practice";
File yourFile = new File(yourFilePath);
BufferedReader bufferedReader = new BufferedReader(new FileReader(yourFile));
最初,我一直在尝试以下操作:
FileInputStream fis = getApplication().openFileInput("practice");
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader bufferedReader = new BufferedReader(isr);
上面的代码导致了异常:
java.io.IOException:文件的结尾过早,请读取Token [EOF]第1行