3

私のプログラムに、自分のコンピューターにあるすべてのファイルの膨大なリストを印刷させたいです。私の問題は、コンピュータにあるすべてのファイルを印刷したいのに、最初のハードドライブの最初のフォルダからのファイルしか印刷しないことです。私がここで間違っていることは何ですか?ありがとう。

これが私が使用するコードです:

主要:

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        ArrayList<File> roots = new ArrayList();
        roots.addAll(Arrays.asList(File.listRoots()));


        for (File file : roots) {
            new Searcher(file.toString().replace('\\', '/')).search();
        }
    }
}

およびサーチャークラス:

import java.io.File;

public class Searcher {

    private String root;

    public Searcher(String root) {
        this.root = root;
    }

    public void search() {
        System.out.println(root);
        File folder = new File(root);
        File[] listOfFiles = folder.listFiles();
        for (File file : listOfFiles) {
            String path = file.getPath().replace('\\', '/');
            System.out.println(path);
            if (!path.contains(".")) {
                new Searcher(path + "/").search();
            }
        }
    }
}
4

5 に答える 5

6

私はちょうどこれを試してみましたが、うまくいきました。ただし、チェックを1つ追加するnull必要があり、ディレクトリの評価方法を変更しました。

package test;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;

public class Searcher {
    public static void main(String[] args) {
        ArrayList<File> roots = new ArrayList<File>();
        roots.addAll(Arrays.asList(File.listRoots()));


        for (File file : roots) {
            new Searcher(file.toString().replace('\\', '/')).search();
        }
    }

    private String root;

    public Searcher(String root) {
        this.root = root;
    }

    public void search() {
        System.out.println(root);
        File folder = new File(root);
        File[] listOfFiles = folder.listFiles();
        if(listOfFiles == null) return;  // Added condition check
        for (File file : listOfFiles) {
            String path = file.getPath().replace('\\', '/');
            System.out.println(path);
            if (file.isDirectory()) {
                new Searcher(path + "/").search();
            }
        }
    }
}
于 2012-05-21T19:19:19.780 に答える
2

次のように検索方法を更新する必要があります。

public void search() {
        System.out.println(root);
        File folder = new File(root);
        File[] listOfFiles = folder.listFiles();
        for (File file : listOfFiles) {
            String path = file.getPath().replace('\\', '/');
            System.out.println(path);
            if (file.isDirectory()) {
                new Searcher(path + "/").search();
            }
        }
    }
于 2012-05-21T19:19:23.260 に答える
1

Java 7 がオプションの場合は、walkFileTree() メソッドを調べてください。ドライブのルートから開始できるツリー内のすべてのファイルとディレクトリにアクセスできます。FileVisitorそれぞれのファイル属性を処理するための基本を実装するだけPathです。ここから始められます。

于 2012-05-21T19:19:36.583 に答える
0

どのようなエラーが発生しているのかわかりませんが、次の行の後にヌルをチェックしていないため、NPE が発生しました。

File[] listOfFiles = folder.listFiles();

次のようにコードを変更した後、問題なく動作するように見えましたが、ファイルがたくさんあるので停止しました。最初のルートの後に次のルートに進むと想定しています(私の場合は c:/ )

import java.io.File;

import java.util.ArrayList; java.util.Arrays をインポートします。

公開クラスの検索 {

    public static void main(String[] args) {
        ArrayList<File> roots = new ArrayList();
        roots.addAll(Arrays.asList(File.listRoots()));


        for (File file : roots) {
            System.out.println(file.toString());
            new Searcher(file.toString().replace('\\', '/')).search();
        }
    }
}

クラス検索者 {

private String root;

public Searcher(String root) {
    this.root = root;
}

public void search() {
    System.out.println(root);
    File folder = new File(root);
    File[] listOfFiles = folder.listFiles();
    if(listOfFiles!=null)
    {
    for (File file : listOfFiles) {
        String path = file.getPath().replace('\\', '/');
        System.out.println(path);
        if (!path.contains(".")) {
            new Searcher(path + "/").search();
        }
    }
    }
}

}

于 2012-05-21T19:34:38.560 に答える