0

基本的に、私がやりたいことは、Windows マシンの特定のパス (「C:\」など) からすべてのファイルを読み取ることです。すべてのファイルをファイル配列に読み取った後、ファイルがディレクトリかどうかを for ループ内でチェックします。隠しファイルも除外しています。その後、2 つの配列リストをそれぞれ並べ替えます。現在のディレクトリがルート ディレクトリでない場合は、「../」が追加され、すべてが最終的な配列リストに書き込まれます。

しかし、問題は、この Java プログラムは、存在するよりも多くのディレクトリを表示することだと思います。"C:\> dir" に対する Windows コマンド シェルの出力は、Java プログラムの出力と同じではないためです。

それを修正する方法はありますか?

「C:\> dir」の出力:

{ "PerfLogs", "Program Files", "Program Files(x86)", "Users", "Windows" }

この Java プログラムの出力:

{ "Documents and Settings", "Dokumente und Einstellungen", "PerfLogs", "Program Files(x86)", "Program Files", "Users", "Windows", "pagefile.sys" }

private void getFileBrowser(String dirPATH) {
    ITEM_TEMP = new ArrayList<String>();
    PATH_TEMP = new ArrayList<String>();
    ITEM_TEMP.clear();
    PATH_TEMP.clear();

    currentWorkingDirectory = dirPATH;

    File f = new File(dirPATH);
    File[] files = f.listFiles();

    for(int i=0; i < files.length; i++) {
        File file = files[i];

        if(file.isDirectory()) {
            if(!file.isHidden() & !file.getName().startsWith("$")) {
                PATH_TEMP.add(file.getPath());
                ITEM_TEMP.add(file.getName() + "/");
            }
        }
        else {
            if(!file.isHidden()) {
                PATH_TEMP.add(file.getPath());
                ITEM_TEMP.add(file.getName());
            }
        }
    }

    Collections.sort(ITEM_TEMP);
    Collections.sort(PATH_TEMP);

    ITEM.clear();
    PATH.clear();

    if(!dirPATH.equals(rootDirectory)) {
        ITEM.add("../");
        PATH.add(f.getParent());
    }

    for(int i=0; i < ITEM_TEMP.size(); i++) {
        ITEM.add(ITEM_TEMP.get(i));
    }
    for(int i=0; i < PATH_TEMP.size(); i++) {
        PATH.add(PATH_TEMP.get(i));
    }
}
4

1 に答える 1

0

Java コードがすべてのファイルを出力しているようです (pagefile.sys はシステムのデフォルトで非表示になっているはずです)。隠しファイルを除外したいとおっしゃいました。

問題はおそらく次の行にあります。

 if(!file.isHidden() & !file.getName().startsWith("$"))

& はビットごとの AND 演算子です。 && 論理 AND 演算子を使用する必要があります。

于 2012-09-02T10:14:21.047 に答える