40

現在のディレクトリにあるファイルを一覧表示できるようにしたい。動作するはずのファイル名をすべて返すわけではないものを作成しました。

File dir = new File(".");
File[] filesList = dir.listFiles();
for (File file : filesList) {
    if (file.isFile()) {
        System.out.println(file.getName());
    }
}

を返しますが.classpath、このフォルダ内に他のJavaファイルがあると確信しています。現在のフォルダのドット表記が間違っている可能性がありますか?

4

7 に答える 7

35

これを試して、フォルダとサブフォルダ内のすべてのファイルを取得します

public static void main(String[]args)
    {
        File curDir = new File(".");
        getAllFiles(curDir);
    }
    private static void getAllFiles(File curDir) {

        File[] filesList = curDir.listFiles();
        for(File f : filesList){
            if(f.isDirectory())
                getAllFiles(f);
            if(f.isFile()){
                System.out.println(f.getName());
            }
        }

    }

ファイル/フォルダのみを取得するには

public static void main(String[]args)
    {
        File curDir = new File(".");
        getAllFiles(curDir);
    }
    private static void getAllFiles(File curDir) {

        File[] filesList = curDir.listFiles();
        for(File f : filesList){
            if(f.isDirectory())
                System.out.println(f.getName());
            if(f.isFile()){
                System.out.println(f.getName());
            }
        }

    }
于 2013-03-18T16:59:07.363 に答える
12

現在のフォルダのドット表記が間違っている可能性がありますか?

の結果を印刷しFile.getCanonicalFile()てパスを確認します。

srcが現在のフォルダではない理由を誰かに説明してもらえますか?

IDEは、JVMを呼び出すときにクラスパスを設定しています。

EG(Netbeansに到達)メニューを選択した場合File| Project Properties (all classes)次のようなものが表示される場合があります。

Netbeansプロジェクトオプション

Working Directoryここで興味深いのはそれです。

于 2013-03-18T18:05:01.800 に答える
3

new File(".")それが実際に指していると思う場所を指していることを確認する必要があります.classpath-Eclipseプロジェクトのルートを示唆しています...

于 2013-03-18T16:58:51.540 に答える
3

これについては簡単に調べましたが、これでうまくいくようです。まだテストしていません。

    File f = new File("."); // current directory

    File[] files = f.listFiles();
    for (File file : files) {
        if (file.isDirectory()) {
            System.out.print("directory:");
        } else {
            System.out.print("     file:");
        }
        System.out.println(file.getCanonicalPath());
    }
于 2013-03-18T17:00:46.347 に答える
1

コードに問題はありません。指定されたディレクトリに直接含まれているすべてのファイルとディレクトリが一覧表示されます。

問題は次のいずれかである可能性があります。

  • ディレクトリは、"."期待したものではありません。パス名は、"."実際にはJVMの「現在のディレクトリ」または「作業ディレクトリ」を意味します。"."を印刷することで、実際のディレクトリを確認できますdir.getCanonicalPath()

  • あなたは何が返ってくるのか誤解していdir.listFiles()ます。の下のツリーにあるすべてのオブジェクトが返されるわけではありませんdirに直接あるオブジェクト(ファイル、ディレクトリ、シンボリックリンクなど)のみを返しますdir

この".classpath"ファイルは、Eclipseプロジェクトディレクトリを見ていることを示唆しており、Eclipseプロジェクトは通常、などのサブディレクトリ内のJavaファイルで構成されています"./src""."ディレクトリにJavaソースコードが表示されるとは思いません。


srcが現在のフォルダではない理由を誰かに説明してもらえますか?」

Eclipseでアプリケーションを起動しているとすると、現在のフォルダーはデフォルトでプロジェクトディレクトリになります。ランチャー構成ウィザードのパネルの1つを使用して、デフォルトの現在のディレクトリを変更できます。

于 2013-03-18T17:13:10.650 に答える
0

コードをスタンドアロンで(コマンドラインから)コンパイルして実行すると、コードは期待どおりの結果をもたらします。各プロジェクトのEclipseのように、デフォルトでは作業ディレクトリはプロジェクトディレクトリであるため、この結果が得られます。

Javaでuser.dirプロパティを次のように設定できます。

   System.setProperty("user.dir", "absolute path of src folder");

その後、期待される結果が得られます。

于 2013-03-18T17:21:31.280 に答える
0

私はこの回答をローカルディレクトリで使用しました(たとえばE://)。最初のディレクトリでは正常に機能し、2番目のディレクトリでは、隠しディレクトリによって問題が発生したことがわかった理由を検索した後、出力でjavanullポインタ例外が発生しました。 、およびこのディレクトリは、この問題を回避するためにWindowsによって作成されました。これを使用してください。

public void recursiveSearch(File file ) {
 File[] filesList = file.listFiles();
    for (File f : filesList) {
        if (f.isDirectory() && !f.isHidden()) {
            System.out.println("Directoy name is  -------------->" + f.getName());
            recursiveSearch(f);
        }
        if( f.isFile() ){
            System.out.println("File name is  -------------->" + f.getName());
        }
    }
}
于 2016-05-11T14:00:35.817 に答える