0

ネットワーク ドライブ上のディレクトリを調べて、階層内の子から親へのマップを作成する必要があります。1 つの代表的なディレクトリは 6 テラバイトで、900,000 個のファイルと 900 個のフォルダーがあります。ファイルではなく、フォルダーのみを気にします。テスト目的で、ファイルのないフォルダーを別のネットワーク ドライブにコピーし、コピーしたバージョンでコードを実行しました。900 個のフォルダーを反復処理するだけで、おそらく 10 秒かかります。ただし、元のディレクトリ構造を反復処理するには 30 分かかります。900,000 個のファイルすべてを無視しているように見えます。

ファイルを見なくてもこれをスピードアップする方法はありますか? 可能であれば、純粋な Java を使用したいと考えています。この巨大なディレクトリを Windows Explorer でブラウズすると、まったく遅く感じません。私のコードは以下です。

public static Map<String, String> findFolderPaths(File parentFolder) throws IOException {
        Map<String, String> parentFolderMap = new HashMap<String, String>();
        Files.walkFileTree(parentFolder.toPath(), new FolderMappingFileVisitor(parentFolderMap));

        return parentFolderMap;
    }


static class FolderMappingFileVisitor extends SimpleFileVisitor<Path> {
        private Map<String, String> mapping;
        FolderMappingFileVisitor(Map<String, String> map) {
            this.mapping = map;
        }
        @Override
        public FileVisitResult preVisitDirectory(Path dir,
                BasicFileAttributes attrs) throws IOException {
            File directory = dir.toFile();
            mapping.put(directory.getName(), directory.getParent());

            return FileVisitResult.CONTINUE;
        }
    }

編集:

言及しなかったパズルの重要なピースは、webstart でアプリを実行していることです。私が報告した時間は、開発ではなく、本番環境のものです。Eclipse から実行すると、FileWalker に期待するよりも時間がかかります。

4

2 に答える 2