1

これは本当に簡単な質問ですが、Google+私のコードはうまくいきません。

Windows上のEclipseで、プログラムが特定のフォルダー内を検索するようにします。このフォルダーは、プロジェクトフォルダー内の、、、などと同じレベルにあります.settings。私のフォルダーは、と呼ばれ、オブジェクトが指すフォルダーです。binsrcsurveysFile

フルパスを両方のコンピューターで実行したいので、フルパスを指定したくありません。プロジェクトのすぐ内側のパスです。

私はこのコードを試していますが、機能していませんnames[]-nullに戻っています。そして、はい、私はいくつかのフォルダを持っていて、中にジャンクをテストしますsurveys

File file = new File("/surveys");
    String[] names = file.list();

    for(String name : names)
    {
        if (new File("/surveys/" + name).isDirectory())
        {
            System.out.println(name);
        }
    }

私の間違いはファイルに渡す文字列内にあると確信していますが、何が問題なのかわかりませんか?

4

3 に答える 3

2

あなたの質問では、実行しているプラ​​ットフォームを指定していません。Windows以外では、先頭のスラッシュは絶対パスを示します。先頭のスラッシュを削除するのが最適です。これを試して:

File file = new File("surveys");
System.out.println("user.dir=" + System.getProperty("user.dir"));
System.out.println("file is at: " + file.getCanonicalPath());
String[] names = file.list();

for(String name : names)
{
    if (new File(file, name).isDirectory())
    {
        System.out.println(name);
    }
}

<projects>実行構成で、プログラムがプロジェクトディレクトリ(user.dir = )から実行されていることを確認してください。

于 2012-11-26T03:38:09.643 に答える
1

file.list()を使用する前に、ファイルがディレクトリであることを確認してください。そうでない場合、厄介なNullPointerExceptionが発生します。

File file = new File("surveys");
if (file.isDirectory()){
   ...
}

また

if (names!=null){
   ...
}
于 2012-11-26T07:17:59.077 に答える
0

ファイルのフルパスをでチェックした場合

System.out.println(file.getCanonicalPath())

絵はすぐにはっきりします。File.getCanonicalPathは、正確にフルパスを提供します。ファイルはパスを正規化することに注意してください。たとえば、Windowsでは「c:/file」は「C:\file」に変換されます。

于 2012-11-26T03:55:45.080 に答える