我正在嘗試編寫該腳本,該腳本需要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,但應該找到每個文件。
如果有任何第三方庫可以做到這一點,那將是驚人的,我一直在絞盡腦汁想如何正確地做到這一點。
在此先感謝!
excel單元格中的文件路徑是絕對的嗎?你可以發佈'dir.listFiles()'和所有'cell.getStringCellValue()'-s的打印,以便我們可以比較和思考解決方案嗎? – 2013-08-16 20:45:20
嘗試通過修剪文件名,只是一個虛構的猜測:) – saurav
米蘭的Excel單元格就像這個「文件名」。他們沒有擴展或路徑。不過,我在Eclipse的項目的src文件夾中有一個文件夾中的所有文件。 – user2690468