我正在尝试编写这个脚本,它需要一张 Excel 表格,从单元格中获取所有文件的名称,然后将每个文件移动到一个特定的文件夹中。我已经完成了大部分代码,我只需要能够仅使用其标题来搜索源目录中的每个文件。另一个问题是我正在搜索多种文件类型(.txt、.repos、.xlsx、.xls、.pdf,有些文件没有扩展名),我只能通过没有扩展名的文件名进行搜索。
在我的 findAndMoveFiles 方法中,我有一个每个文件的 ArrayList 和一个 XSSFCells 到字符串的 Guava Multimap(一个单元格是 Excel 文件中的一个单元格,一个字符串是它需要进入的文件夹的名称,一对多关系)作为参数。我现在得到的方法就是这个。
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,但应该找到每个文件。
如果有任何第三方库可以做到这一点,那就太棒了,我一直在绞尽脑汁思考如何正确地做到这一点。