Java 扫描仪仅读取文本文件的第一行

Java 扫描仪仅读取文本文件的第一行,java,file,for-loop,java.util.scanner,Java,File,For Loop,Java.util.scanner,这是我的密码 public static void main(String[] args) { File source = // Scanner s = null; int lineNumber =0; ArrayList<ArrayList<Integer>> tagsArray = new ArrayList<>(); try { s= new Scanner(s

这是我的密码

    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
    }
}
publicstaticvoidmain(字符串[]args){
文件源=//
扫描器s=null;
int lineNumber=0;
ArrayList标记数组=新的ArrayList();
试一试{
s=新扫描仪(源);
而(s.hasNext()){
字符串[]cols=s.nextLine().split(“”);
for(int i=0;i
当我删除for语句时,它读取整个文本文件,但当我使用它时,它只读取第一行
为什么?

我猜您会遇到一个
异常,但您会捕获并隐藏它,而不是处理它<这太糟糕了您至少应该打印异常的堆栈跟踪

您尝试访问:

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

tagsArray
为空时。在访问它之前,您需要实例化
标记数组中的每个
数组列表

我猜您会得到一个
异常
,但您会捕获并隐藏它,而不是处理它<这太糟糕了您至少应该打印异常的堆栈跟踪

您尝试访问:

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

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

我认为使用BufferedReader比使用扫描仪读取文件要好。看一看,我会说使用BufferedReader比使用扫描仪读取文件要好。看一看,使用try-catch块不好吗?如何处理异常?尝试捕获块很好。但在挡块内什么也不做是不好的。至少使用
e.printStackTrace()
此外,最好在每个if或for之后使用{和}。与其在catch块中使用“printf”,不如诚实地声明
main
抛出
IOException
。使用try-catch块不好吗?如何处理异常?尝试捕获块很好。但在挡块内什么也不做是不好的。至少使用
e.printStackTrace()
此外,最好在每个if或for之后使用{和}。与其在catch块中使用“printf”,不如诚实地声明
main
来抛出
IOException