web-dev-qa-db-ja.com

現在のディレクトリ内のファイルを一覧表示する方法は?

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

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

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

31
Martynogea

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

File.getCanonicalFile() の結果を出力して、パスを確認します。

Srcが現在のフォルダーではない理由を誰にでも説明できますか?

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

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

Netbeans project options

Working Directoryここで興味深い。

10
Andrew Thompson

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

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());
            }
        }

    }
24
Sach

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

3
Gyro Gearless

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

    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());
    }
3
Crispy91

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

問題は、おそらく次のいずれかです。

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

  • dir.listFiles()が返すものを誤解しています。 dirの下のツリー内のすべてのオブジェクトを返しません。 dirdirectlyであるオブジェクト(ファイル、ディレクトリ、シンボリックリンクなど)のみを返します。

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


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

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

1
Stephen C

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

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

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

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

0
avinesh

ローカルディレクトリでこの回答を使用しました(たとえば、E://)最初のディレクトリでうまく動作し、secondeディレクトリでは、出力がJava nullポインタ例外、問題が隠しディレクトリによって作成されたことを発見した理由を検索した後、) 、およびこのディレクトリは、この問題を回避するために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());
        }
    }
}
0
Yagami Light