-1

私の状況は単純です。私は私のプログラムにこれを持っています:

File folder = new File("input");
File[] listOfFiles = folder.listFiles();
System.out.println(listOfFiles.length);

「input」フォルダから配列へのファイルのすべてのパスを配置したいだけです。eclipseで実行すると正常に動作します。これをcmdで実行しようとすると、nullポインター例外が発生します。私のJavaファイルは次のディレクトリにあります:

C:\ Users \ JHeng \ Desktop \ java stuff \ converter \ src

返信ありがとうございます!

絶対ディレクトリを最初の行に配置すると、次のようになります。

File folder = new File("C:\\Users\\JHeng\\Desktop\\java stuff\\converter\\src\\input");

Eclipseで実行すると、Eclipseは行にnullポインター例外を与えます。

System.out.println(listOfFiles.length);

前もって感謝します!

4

2 に答える 2

1

問題は、2つのケースで作業ディレクトリが異なることです。

最初のFile行で作成するオブジェクトは相対パスを使用するため、ある場所から実行され、他の場所から失敗した場合、関連するフォルダーが検索されます。特にlistFiles()を呼び出すと、次のようになります。

nullこの抽象パス名がディレクトリを示していない場合、またはI/Oエラーが発生した場合に返されます。

代わりに絶対パスを指定して、プログラムの動作が実行元のディレクトリに依存しないようにすることはできますか?(これには、ディレクトリをハードコーディングするか、構成変数またはシステムプロパティとして取得することが含まれる場合があります。)

これを実行したくない場合は、おそらく、プログラムの実行元のディレクトリに応じて、プログラムの動作が異なるはずです(たとえば、現在のディレクトリ内のすべてのファイルに対して何かを実行する場合)。これが意図されている場合は、「input」というサブディレクトリがない場合に、より適切なエラー処理を行うことができます。たとえばfolder.isDirectory()、trueであることを確認し、そうでない場合は適切なエラーメッセージを出力します。

于 2012-06-28T17:06:02.157 に答える
0

それは明らかにワークスペースの問題です。次のコードを試してください......。

ただし、最初に、指定されたパスに「src」フォルダーがあることを確認してください。これは、以下の引数としてファイルコンストラクターに渡されます。

File folder = new File("c:\\Users\\JHeng\\Desktop\\java stuff\\converter\\src");
File[] listOfFiles = folder.listFiles();
System.out.println(listOfFiles.length);
于 2012-06-28T17:34:36.963 に答える