【问题标题】:Scanner read only the first line of a textual file扫描仪只读取文本文件的第一行
【发布时间】:2013-04-23 10:25:10
【问题描述】:

这是我的代码

    public static void main(String[] args) {

    File source = //


    Scanner s = null;       
    int lineNumber =0;
        ArrayList<ArrayList<Integer>> tagsArray = new ArrayList<>();
    try {

        s= new Scanner(source);
    while (s.hasNext()) {

            String[] cols = s.nextLine().split("    ");

            for (int i = 0; i < cols.length; i++) {
                if (cols[i].equals("1"))
                    tagsArray.get(i).add(lineNumber);
                }
            lineNumber++;

        }   
    } catch (Exception e) {
        // TODO: handle exception
    }
}

当我删除 for 语句时,它会读取整个文本文件,但当我使用它时,它只会读取第一行 为什么?

【问题讨论】:

  • 我会说使用 BufferedReader 比使用扫描仪读取文件要好。看看mkyong.com/java/…

标签: java file for-loop java.util.scanner


【解决方案1】:

我猜你得到了一个Exception,但你抓住并隐藏它而不是处理它。 这很糟糕!您至少应该打印异常的堆栈跟踪。

您尝试访问:

tagsArray.get(i).add(lineNumber);

tagsArray 为空时。在访问之前,您需要在 tagsArray 中实例化每个 ArrayList&lt;Integer&gt;

【讨论】:

  • 使用 try catch 块不好?如何处理异常?
  • 试试catch块就好了。但是在 catch 块内什么都不做是不好的。至少使用e.printStackTrace()
  • 另外,最好在每个 if 或 for 之后使用 { 和 }。
  • 而不是在 catch 块中使用“printf”,而是诚实地声明 main 来抛出 IOException
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 2011-12-18
  • 1970-01-01
相关资源
最近更新 更多