2013-04-23 158 views
0

这是我的代码的第一行扫描仪仅读取文本文件

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 
    } 
} 

当我删除它读取整个文本文件,但是当我使用它,它只读了第一行 为什么声明?

+0

我会说使用BufferedReader会比使用扫描仪读取文件更好。看看http://www.mkyong.com/java/how-to-read-file-from-java-bufferedreader-example/ – user2280897 2013-04-23 10:30:28

回答

3

我想你会得到一个Exception,但你捕捉并隐藏它而不是处理它。 这非常糟糕!您至少应该打印异常的堆栈跟踪。

您尝试访问:

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

tagsArray是空的。在访问它之前,您需要在tagsArray中实例化每个ArrayList<Integer>

+0

使用try catch块不好吗? 如何处理异常? – nawara 2013-04-23 10:38:33

+1

尝试catch块是好的。但是在catch块里面什么都不做是不好的。至少使用'e.printStackTrace()' – BobTheBuilder 2013-04-23 10:41:44

+2

另外,最好在每个if或for之后使用{和}。 – BobTheBuilder 2013-04-23 10:42:32