1

ディレクトリに存在するすべてのファイルとサブディレクトリを表示するプログラムを作成しました。ディレクトリ名は、cmdのコマンドラインから引数として渡されます。
最初のif条件(if(f.isDirectory()))は、指定された引数がディレクトリであるかどうかをチェックし、正常に機能します。
次に、dir_content = f.list()であるFile.list()メソッドを使用して、ディレクトリ内のすべてのファイル名のリストを文字列dir_contentの配列に格納します。
次に、forループで、String配列dir_contentに格納されているファイル名ごとに新しいファイルオブジェクトが作成されるたびに、File f1 = new File(dir_content [i])となり、exists()を使用してファイルの存在を確認します。if(f1.exists())であるメソッド。
ここで問題となるのは、f1.existsは、指定されたディレクトリに存在するにもかかわらず、多くのファイルに対してfalseを返すことです。いくつかのファイルが表示され、さらにサブディレクトリが表示されません。
以下は私のプログラムのコードです:-

import java.io.File;
class FileDemo1
{
 public static void main(String[] a)
 {
  File f = new File(a[0]);
  String[] dir_content;   

  if(f.isDirectory())
  {
    System.out.print(f.getName()+" is a directory containing ");
    dir_content = f.list();

    for(int i=0;i<dir_content.length;i++)
    { 
        File f1 = new File(dir_content[i]);
        if(f1.exists())
        {
         System.out.print("\n\t: "+f1.getName());
         System.out.print("    "+f1.isFile());
         System.out.print("    "+f1.isDirectory());
        }
    }   

  }
 } 
}

誰かが問題の背後にある理由とその解決策を教えてください。
前もって感謝します。

4

2 に答える 2

2

あなたのロジックは正しいですが、File.listはあなたの考えを実行しません。完全なパスではなく、ファイル名のリストを返すため、次のようにする必要があります。

 File f1 = new File(f,dir_content[i]);

ファイルパスを適切に作成するには(指定されたディレクトリ内にファイル「file1.txt」が必要です)。

于 2013-03-18T12:21:06.073 に答える
0

dir_content[i] にはディレクトリ名のみが含まれるため、File オブジェクトを作成すると、パス全体ではなくディレクトリの名前のみが含まれます。そのため、false が返されます。

したがって、次のようなことを行うと、true が返されるはずです。

  File f1 = new File(f.getPath() + dir_content[i]);   ///f being a directory
于 2013-03-18T12:26:16.963 に答える