2013-11-04 143 views
0

我有两个类fiels,一个名为CSVUtils.java,另一个名为FilesCollector.java。 CSVUtils.java包含一个由FilesCollector.java调用的名为matchValues(String csvFile,int columnNumber,String matchValue)的静态方法。基本上它是这样Java:for循环只能执行一次

Public Class CSVUtils { 

    private static String FILENAME; 
    private static int COLUMN; 
    private static String MATCHVALUE; 
    public static void matchValues(String csvFile, int columnNumber, String matchValue) { 
    try { 
    //read csvFile, match values, and write to outPut file. details omitted. 
    } finally { 
     csvReader.close(); 
     csvWriter.close(); 
     System.out.println("success"); 
     System.exit(0); 
    } 

    } 
} 

在FilesCollector.java,我使用Apache Commons-IO抓取的CSV文件的列表,并将其存储在数组中的文件[] csvFiles。然后我用下面的for循环来处理个人csv文件

for (File e : csvFiles) { 
    CSVUtils.matchValues(e.getAbsolutePath(), 9, "Yes"); 
} 

但是,由于某种原因,我不知道,这上面的for循环只能处理文件中的[]数组csvFiles第一个CSV文件。你们可以帮我解决我代码中可能出错的地方吗?非常感谢!

编辑:在注释掉这行后System.exit(0);我的代码正在工作。为什么这行代码使该方法无法正常工作?

+1

真的是'csvFiles.length> 1'吗? –

+0

是的,在FilesCollector.java中,我测试了csvFiles数组的大小。 – TonyGW

+0

System.exit(0)关闭程序。如果程序关闭,它不能继续for循环。 – hankd

回答

3

在你的finally块中,你调用System.exit(0),所以在你处理一个文件后,你关闭了你的程序。

因此无论csvFileslength是什么,您将只处理第一个文件。

finally { 
     csvReader.close(); 
     csvWriter.close(); 
     System.out.println("success"); 
     System.exit(0); <--- here 
    } 

删除此行,你会没事的。

1

您要关闭的程序与

System.exit(0); 

所以它不会继续。