2013-09-27 55 views
0

我使用這段代碼,發現我的程序的其他部分在給定的目錄中創建XML文件:Java:如何獲得File.listOfFiles非遞歸在Linux上工作?

String fileName; 
File folder = new File(mainController.XML_FILES_LOCATION); 
File[] listOfFiles = folder.listFiles(); 

for (int i = 0; i < listOfFiles.length; i++) { 
    if (listOfFiles[i].isFile()) { 
     fileName = listOfFiles[i].getName(); 
     if (fileName.endsWith(".xml")) { 
      Document readFile = readFoundXmlFile(fileName); 
      if (readFile != null) { 
       boolean postWasSuccesful = mainController.sendXmlFile(readFile, fileName); 
       reproduceXmlFile(readFile, fileName, postWasSuccesful); 
       deleteXmlFile(fileName); 
      } 
     } 
    } 
} 

它所做的是它的內容是被放置在指定的目錄中的所有XML文件,它將其發送到一個URL並將其複製到一個子目錄(根據布爾postWasSuccedful發送''或'失敗'),並刪除原件,以便它不會再次發送。

在Windows中,按預期工作,但我已將工作代碼傳送到Linux機器,並突然它在發送bla.xml的循環中發送,然後一秒後發送\ bla.xml,並再次發送第二個後來發送\ sent \ bla.xml然後發送\ sent \ sent \ bla.xml等

爲什麼Linux自己決定listFiles()是遞歸的?而且,更好的是,如何預防這種情況?我可以在if語句中添加一個額外的檢查以查找以.xml結尾的文件,該文件不存在fileName中允許的directory-char,但這是我不希望的替代方法中的文件數量的解決方法。 up目錄永遠不會很高,而發送的子目錄中的文件數量可能會在一段時間後變得相當高,我不希望這段代碼變慢

回答

3

我的精神力量告訴我,reproduceXmlFile()建立目標路徑名使用硬編碼的反斜槓("\"),因此您實際上正在創建名稱中帶有反斜槓的文件。

您需要使用File.separator而不是硬編碼的"\"。或者使用類似new File("sent", fileName).toString()的東西來生成輸出路徑名。

(道歉,如果我錯了!)

+0

你的精神力量是真正強大的。順便說一句,我不知道任何理由實際使用\在任何地方,/在窗口中工作正常.... – Ingo

+0

糟糕...你是對的 – JeroenV