簡體   English   中英

使用 Java 建立 Windows 中的文件索引 10

[英]Use Java to build an index of files in Windows 10

我正在 Java 中編寫一個桌面應用程序來快速查找文件。 我已經使用 Java 中的 exec 命令來運行 powershell 來執行此操作,因為 Java 的 os.walk 方法似乎要慢得多。 現在生成一個文本文件大約需要 5 分鍾,其中列出了我計算機上所有文件的內容(總共大約 440,000 個文件)。

這很好,但我遇到的問題是我無法更新這個文件列表。 因此,如果我在我的文件系統中更改了一些文件並想要更新我的文件列表,我就不能這么快(即增量)。 相反,我必須從頭開始生成文件列表。

我知道你可以使用 git-bash 創建一個定位數據庫(使用 updatedb)。 現在這是一個很棒的解決方案,但是我正在嘗試創建的應用程序可能會被沒有安裝它的人使用。 因此,我想使用 Windows 提供的默認應用程序(即 powershell,或 Java 原生)。 我試圖讓這個應用程序易於使用,所以我不希望用戶必須安裝一堆其他依賴項。

以下代碼顯示了如何使用 Java 並完全避免 Powershell。 它在 memory 中構建了一個數組,並在 30 秒內將其寫入文本文件(列出了 467,000 個文件)!

在 Main 或任何您想要的地方運行以下代碼。 它調用 createFileList 方法。

List<Path> pathsArrayList = new ArrayList<>();
Path rootPath_obj;
rootPath_obj = Paths.get(this.configMap.get("root_path"));
createFileList(rootPath_obj);

下面是樹 stream 遍歷代碼:

public void createFileList(Path path_in) throws IOException, AccessDeniedException {

    try (DirectoryStream<Path> mystream = Files.newDirectoryStream(path_in)) {

        for (Path entry : mystream) {
            if (Files.isDirectory(entry)) {
                createFileList(entry);
            }
            pathsArrayList.add(entry);
        }
    }
    catch (AccessDeniedException ex) {
        // Do nothing, just move on to the next file
    }
}

現在寫文件以備后用。 這是根路徑樹中所有文件的列表。

    System.out.println("Writing database...");
    try (FileWriter writer = new FileWriter(this.configMap.get("db_path"))) {
        for(Path pth: pathsArrayList){
            writer.write(pth.toString() + System.lineSeparator());
        }
    }
    System.out.println("...database written.");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM