Weka-文件过早结束,第1行

时间:2019-01-07 18:37:42

标签: java android file machine-learning weka

我知道这个问题听起来像是重复的,但事实并非如此。关于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

1 个答案:

答案 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行