0

このコード

URL listofFiles = this.getClass().getResource("someDir");
File f = new File(listofFiles.toString());
File[] files = f.listFiles();

TomcatWebサーバー環境のJUnit単体テストで実行されます。

返されるURLは間違いなく有効です。listofFilesOS XのFinderにアクセスし、「ディレクトリに移動」を実行して、ディレクトリ内のすべてのファイルの値を貼り付けて表示しました。

listFiles()nullを返すのはなぜですか?

4

2 に答える 2

2

文字列を使用するFileコンストラクターは、URL(のtoString)ではなくパスを予期します。

たとえば、別のコンストラクタを使用しますnew File(listofFiles.toURI())。または、パスを指定しますnew File(listofFiles.getPath())

更新:または(これは醜いように見えるかもしれませんが)Javaの第一人者である川口耕介が示唆しているように、両方のファイルコンストラクターを試してください。

File(URL)コンストラクターがあれば...

于 2011-03-10T22:54:08.167 に答える
1

JavadocにFile.listFiles()よると:

戻り値: この抽象パス名で示されるディレクトリ内のファイルとディレクトリを示す抽象パス名の配列。ディレクトリが空の場合、配列は空になります。この抽象パス名がディレクトリを示していない場合、またはI / Oエラーが発生した場合は、nullを返します。

null戻り値を取得しているという事実は、ファイルコンストラクターに渡しているパスがディレクトリを指していないことを示しています。

の結果をFileコンストラクターに渡すことURL.toString()は、あなたが思っているものとは異なるパスを構築しているのではないかと思います。代わりに、次のようなものを試してください

File f = new File(listofFiles.toURI());

さらに、の値をログに記録しf.getAbsolutePath()て、読み取られるパスが予想と同じであることを確認することもできます。

于 2011-03-10T22:53:49.147 に答える