2013-11-04 151 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); 

所以它不會繼續。