2013-08-16 22 views
-2

我正在嘗試編寫該腳本,該腳本需要Excel工作表,從單元格獲取所有文件的名稱,並將這些文件的每個文件移動到特定的文件夾。我已經完成了大部分代碼,我只需要能夠使用其標題來搜索源目錄中的每個文件。另一個問題是我正在搜索多種文件類型(.txt,.repos,.xlsx,.xls,.pdf,並且某些文件沒有擴展名),我只能通過文件名進行搜索,而不用擴展名。使用Java在僅使用名稱的目錄中查找文件

在我的findAndMoveFiles方法中,我得到了每個文件的ArrayList和一個XSSFCells到字符串的Guava Multimap(一個單元格是Excel文件中的一個單元格,String是需要進入的文件夾的名稱,一對多關係)作爲參數。我現在所擁有的方法是這樣的。

public static void findAndMoveFiles(List<File> files, Multimap<XSSFCell, String> innerCells) { 
    // For each file, get its values (folders), and put that file in each of those folders 
    for (XSSFCell cell : innerCells.keySet()) { 
     // find the file in the master directory 
     //Finder f = new Finder(); 
     //if (f.canBeFound(FOLDER, cell.getStringCellValue())) { 
      File file = find(FOLDER, cell.getStringCellValue()); 
      //System.out.println(file.getAbsolutePath()); 
      //List<String> values = new ArrayList(innerCells.get(cell)); 
      /*for (String folder : values) { 
       File copy = file; 
       if (copy != null) { 
        System.out.println(folder); 
        System.out.println(copy.getAbsolutePath()); 
        if (copy.renameTo(new File("C:\\strobell\\" + folder + "\\" + copy.getAbsolutePath()))) { 
         System.out.println(copy.getName() + " has been moved successfully."); 
        } else { 
         System.out.println(copy.getName() + " has failed to move."); 
        } 
       } 
      }*/ 
     //} 
    } 
} 

public static File find(File dir, String fileName) { 
    String files = ""; 
    File[] listOfFiles = dir.listFiles(); 

    for (int i = 0; i < listOfFiles.length; i++) { 
     if (listOfFiles[i].isFile()) { 
      files = listOfFiles[i].getAbsolutePath(); 
      if (files.equals(fileName)) { 
       return listOfFiles[i]; 
      } 
     } 
    } 
    return null; 
} 

我註釋掉了零件,因爲它不起作用。我得到NullPointerExceptions,因爲有些文件被返回爲空。我知道它返回null,但應該找到每個文件。

如果有任何第三方庫可以做到這一點,那將是驚人的,我一直在絞盡腦汁想如何正確地做到這一點。

在此先感謝!

+0

excel單元格中的文件路徑是絕對的嗎?你可以發佈'dir.listFiles()'和所有'cell.getStringCellValue()'-s的打印,以便我們可以比較和思考解決方案嗎? – 2013-08-16 20:45:20

+0

嘗試通過修剪文件名,只是一個虛構的猜測:) – saurav

+0

米蘭的Excel單元格就像這個「文件名」。他們沒有擴展或路徑。不過,我在Eclipse的項目的src文件夾中有一個文件夾中的所有文件。 – user2690468

回答

0

而不是

File[] listOfFiles = dir.listFiles(); 

使用

File[] listOfFiles = dir.list(new FileNameFilter() { 
    public boolean accept(File dir, String name) { 
     if(/* code to check if file name is ok */) { 
      return true; 
     } 
     return false; 
    } 
});); 

然後你就可以在條件的文件名稱編碼你的邏輯。

+0

謝謝我會嘗試! – user2690468

相關問題