-2

Excelシートを取得し、セルからファイルのすべての名前を取得し、それらの各ファイルを特定のフォルダーに移動するこのスクリプトを作成しようとしています。ほとんどのコードは既に完了しています。必要なのは、ソース ディレクトリ内の各ファイルをそのタイトルだけで検索できるようにすることだけです。もう 1 つの問題は、複数のファイル タイプ (.txt、.repos、.xlsx、.xls、.pdf、および一部のファイルには拡張子がない) を検索していることです。拡張子のないファイル名でしか検索できません。

私の findAndMoveFiles メソッドでは、各ファイルの ArrayList と XSSFCells から文字列への Guava Multimap を取得しています (セルは Excel ファイルの 1 つのセルであり、文字列は移動する必要があるフォルダーの名前であり、1 対多です)関係) をパラメーターとして使用します。メソッドについて私が今持っているのはこれです。

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

うまくいかなかったのでコメントアウトしました。一部のファイルが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 に答える