解決しました
available()メソッドが実際に何をするのか誤解していたので、データを書き込むコードを次のように変更しました。
int b = input.read();
while (b != -1) {
output.write(b);
b = input.read();
}
別の機会に、より効率的な読み取り/書き込み方法に取り組みます。今のところ、それが機能していることをうれしく思います。助けてくれてありがとう!
元の投稿
Commons-Netライブラリを使用してFTP経由でサーバーと対話していますが、サーバーからローカルマシンにファイルをダウンロードしようとすると問題が発生します。これがComments-Net.FTPClientのバグかどうかはわかりませんが、ライブラリを正しく使用していない可能性が非常に高くなります。とはいえ、問題をグーグルで検索したところ、解決策を見つけることができませんでした。見たサンプルコードは、ファイルのダウンロードに私と同じ方法を使用しているようです。
とにかく、実際の問題は、ダウンロードされたファイルの一部が、データが含まれているはずなのに完全に空であるということです。これはランダムに発生するため、すべてのファイルをダウンロードするたびに、毎回異なるファイルが空になります。サーバーからデータを読み取ったり、ファイルに書き込んだりする方法に問題があると思います。
コードは次のとおりです。
// For each file
InputStream input = ftp.retrieveFileStream(sourcePath);
ftp.completePendingCommand();
OutputStream output = new FileOutputStream(new File(destinationPath));
while (input.available() > 0) {
output.write(input.read());
}
input.close();
output.close();
私はネットワーキングにかなり慣れていないので、私はただ愚かで、本当に単純な間違ったことをしているだけですか?