从文本中读取Java中的数据

时间:2013-12-28 10:44:19

标签: java file-io bufferedreader fileinputstream

我试图阅读包含3列数据集的ex2data2.txt。我想将它存储在我的x数组和y数组中。但它不起作用。它无法读取文本文件。文本文件的位置和我的代码一起在我的src文件夹中。

    double[][] x = new double[180][1];
    double[][] y = new double[180][0];
       try{
           BufferedReader br=new BufferedReader(new FileReader("ex2data2.txt"));
           String words[]=new String[2];
           String line=null;
           int i = 0;
           while((line=br.readLine())!=null){
               words=line.split(",");
               //double[i] y = Double.parseDouble(words);
                x[i][0] = Double.parseDouble(words[0]);
                x[i][1] = Double.parseDouble(words[1]);
                y[i][0] = Double.parseDouble(words[2]);
           i++;
           }
           br.close();
       }
       catch(Exception e){
           System.err.println("Error: Target File Cannot Be Read");
       }

3 个答案:

答案 0 :(得分:2)

您应该将文件放在顶部的父项目文件夹中。不在src /

编辑:我已经运行了这个,以便证明...

访问文件,读取所有数据。

java.lang.NumberFormatException:对于输入字符串:“43 323 33”这个我放入了该文件

at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1241)
at java.lang.Double.parseDouble(Double.java:540)
at com.rem.so.Rem.main(Rem.java:18)

下次运行

java.lang.ArrayIndexOutOfBoundsException: 1
    at com.rem.so.Rem.main(Rem.java:19)

更正后 ..

double[][] x = new double[180][2];
double[][] y = new double[180][1];

现在已经完成了。

请找到我放置文件的屏幕截图...

enter image description here

答案 1 :(得分:2)

catch(Exception e){
   System.err.println("Error: Target File Cannot Be Read");
}

任何编写此代码的开发人员都应立即解雇。

从不抓住Exception,但执行正确且具体的错误处理。捕获最精确的错误来处理(例如FileNotFoundException),避免捕获您不知道如何处理的错误。如果有疑问,重新抛出错误,以便外部错误处理程序可以处理它。始终记录错误,除非预期发生。

然后您将收到更准确的错误消息。但您选择忽略实际错误e

真的非常真实地阅读了Java书籍或教程,特别是有关正确异常处理的部分。 通过像你一样的方式丢弃错误,使你自己的生活变得困难。

异常几乎永远你应该忽略的东西。您出于某种原因需要处理它们! (事实上​​,还有“未经检查”的例外情况,你不需要这样做。这使得更明显的是,你需要来正确处理它们 。)

Three Rules for Effective Exception Handling (java.net)


您的错误很可能是ArrayOutOfBoundsException(您不应该抓住它!)

double[][] x = new double[180][1];
double[][] y = new double[180][0];

太小。你可能需要

double[][] x = new double[180][2];
double[][] y = new double[180][1];

答案 2 :(得分:2)

double [] [] y = new double [180] [0];

这可能不是你想要的。第二个维度为零,因此您无法在该数组中放置任何内容。第二个维度必须至少为1.