4

ファイルをリモートマシンにFTPで転送しようとしています。以下は私のコードです:-

FTPClient ftpClient = new FTPClient(); 
ftpClient.connect("home.abc.com"); 
ftpClient.login("remote", "guesst12"); 
int replyCode = ftpClient.getReplyCode(); 
ftpClient.changeWorkingDirectory("share")) 
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
InputStream input = new FileInputStream(new File("H:/testFile.txt"));
OutputStream out =  ftpClient.storeFileStream("testFile.txt");
Util.copyStream(input, out);
out.close();
input.close();
ftpClient.completePendingCommand()
ftpClient.logout();
ftpClient.disconnect();

このコードを実行すると、コードは問題なく実行されますが、リモートマシンでファイルを確認すると、ファイルは作成されていますが、コンテンツ(OKB)ファイルはありません。コードに何かが欠けていますか?

[更新]:ファイルを保存するために次のコードを試してみました:-

if(ftpClient.storeFile("testCopy.txt", input)) {
    System.out.println("File Stored Successfully");
}
System.out.println(ftpClient.getReplyString());

今私が受け取った返信コードは:-451 Failure writing to local file.それはどういう意味ですか。

ありがとう

4

4 に答える 4

2

それを何度も見た後、私はさまざまなことを考え続けています。

ストリームをコピーする前に、InputStreamがファイルを読み取っていることを確認しますか?FileInputStreamが開始時にファイルを読み取るかどうかわからないためです。

于 2011-07-16T15:29:23.203 に答える
0

問題は、Util.copyStreamあなたが提供しなかったコードにあると思います。ApacheCommonsIOのIOutilsを使用してストリームをコピーすることを強くお勧めします。

于 2011-07-16T15:44:39.770 に答える
0

同様の問題がある古い質問をここで見ると、Commons-NETライブラリ(FTPClientがその一部です)のバグに遭遇したようです。

これを修正するには、新しいバージョン(3.0.1以降)または以前のバージョン(2.2)をインストールしてみてください。

于 2011-07-17T00:52:21.450 に答える
0

FTP経由でファイルをコピーしようとしたときにFTPエラー451が発生する理由の1つは、特にサーバー側で0サイズのファイルが作成されている場合、ディスクに空き容量がないことが原因である可能性があります。

于 2015-01-28T10:14:20.547 に答える