首页 > 解决方案 > Weka - 文件过早结束,第 1 行

问题描述

我知道这个问题听起来像是重复的,但事实并非如此。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 = new InputStreamReader(fis); BufferedReader bufferedReader = new BufferedReader(isr); 实例组合 = new Instances(bufferedReader);

我花了很多时间搜索这个错误,但还没有找到解决方案。再一次,我没有将它保存为 arff 文件,我认为它被保存为文本文件。我也相信错误与获取BufferedReader并将其传递给Instances构造函数有关。

有人能帮我解决这个问题吗?我在 Eclipse 中使用了一个具有类似结构的文本文件,但现在在 Android 中,它给了我这个错误。


更新:

我找到了解决问题的方法并将其发布在下面。问题在于将文件读入BufferedReader.

标签: javaandroidfilemachine-learningweka

解决方案


通过遵循不同的方法BufferedReaderFile. 以下代码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 行


推荐阅读