-2

我正在尝试编写这个脚本,它需要一张 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,但应该找到每个文件。

如果有任何第三方库可以做到这一点,那就太棒了,我一直在绞尽脑汁思考如何正确地做到这一点。

4

1 回答 1

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;
    }
}););

然后,您可以对条件中的文件名进行逻辑编码。

于 2013-08-16T20:44:37.413 回答