私の要件は、さまざまなディレクトリから必要なファイル拡張子のファイルのリストを取得することです。ファイル自体を取得しながら、入力ストリームを取得して何らかの処理を行う必要があります....必要なファイル拡張子を持つファイルのリストを取得しようとしています。そのリストで選択したすべてのファイルから入力ストリームを取得しようとしています。最初の反復では、必要なファイルを取得しています。また、1 つのファイルのストリームを取得していますが、次のファイルではヌル ポインター例外が発生します。また、2回目の繰り返しからファイルのリストを取得できません
テストに使用したサンプルコード:
System.out.println(ftp.printWorkingDirectory());
boolean status = ftp
.changeWorkingDirectory("mydirectory");
System.out.println("Status of Change Directory:" + status);
System.out.println(ftp.printWorkingDirectory());
InputStream is = null;
System.out.println(ftp.printWorkingDirectory());
System.out.println(ftp.isConnected());
FTPFile[] list2 = ftp.listFiles();
System.out.println("Number of files in this directory:"
+ list2.length);
for (int i = 0; i < list2.length; i++) {
System.out.println("-------[" + list2[i].getName()
+ "]---------------------");
is = ftp.retrieveFileStream(list2[i].getName());
int bytesRead = 0;
byte[] buffer = new byte[1024];
while ((bytesRead = is.read(buffer, 0, buffer.length)) > 0) {
System.out.println(new String(buffer, 0, bytesRead));
}
//is.close();
System.out.println("-------[END:" + list2[i].getName()
+ "]---------------------");
}
ファイルの数は 3 と表示され、「mydirectory」の最初のファイルは正しく読み取られますが、2 番目のファイルを読み取ろうとすると、null ポインター例外が表示されます .... また、retrieveFileStream メソッドを使用してストリームを読み取った後、現在の作業ディレクトリを印刷しようとすると、null 値が返されますが、まだ接続されていると表示されます....
コードにバグがある場合はお知らせください....私にとって唯一の回避策は、入力ストリームを読み取るたびにftpの場所に接続することでしたが、これは良いことではありません....