【问题标题】:Reading data in Java from text从文本中读取 Java 中的数据
【发布时间】:2013-12-28 10:44:18
【问题描述】:

我正在尝试读取包含 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");
       }

【问题讨论】:

  • 如果是抛出异常,异常是什么?为什么y 的维度为零?
  • 请粘贴您的 StackTrace
  • 异常是无法读取目标文件。因为我会将 y 转换为矩阵(Jama lib)
  • @RakeshKR StackTrace 是什么?
  • @user3065339 检查这个stackoverflow.com/questions/3988788/… :-)

标签: java file-io bufferedreader fileinputstream


【解决方案1】:

您应该将文件放在顶部的父项目文件夹中。不在 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];

现在完成了。

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

【讨论】:

  • 你的意思是在项目文件夹里面??仍然无法读取。
  • 正如@Roger Rowland 指出的,为什么你的 y 列大小是 0?你收到ArrayIndexOutOfBoundsException 了吗?
  • 因为我认为数组的第一个索引是 0。
  • 好的,正如@Anony-Mousse 建议的那样,仔细阅读一个好的java教程。在java中会有很多错误处理,所以你自己在编码时不应该犯任何错误。
  • 对不起。我是 Java 新手,我还在学习。我不知道这样的事情。
【解决方案2】:

双[][] y = 新双[180][0];

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

【讨论】:

    【解决方案3】:
    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];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多