5

/* localhost で FTP サーバーを実行しています。ファイルをダウンロードするときは ftpClient.retrieveFile() メソッドを使用します。replyCode は 550 です。commons-net の API を読んで、550 の replyCode を見つけました。定義は "public static final int FILE_UNAVAILABLE 550" ですが、コードから問題を見つけることができません。
ご協力いただきありがとうございます。

*/

    FTPClient ftpClient = new FTPClient();
    FileOutputStream fos = null;

    try {
        ftpClient.connect("192.168.1.102",2121);
        ftpClient.login("myusername", "12345678");
        ftpClient.setControlEncoding("UTF-8");
        ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
        String remoteFileName = "ftpserver.zip";//this file in the rootdir
        fos = new FileOutputStream("f:/down.zip");
        ftpClient.setBufferSize(1024);
        ftpClient.enterLocalPassiveMode();
        ftpClient.enterLocalActiveMode();
        ftpClient.retrieveFile(remoteFileName, fos);  
        System.out.println("retrieveFile?"+ftpClient.getReplyCode());
        fos.close();
        ftpClient.logout();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            ftpClient.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("关闭FTP异常", e);
        }
    }
4

6 に答える 6

2

FTP エラー 550 要求されたアクションは実行されませんでした。ファイルが利用できない、見つからない、アクセスできない

したがって、エンコンディングは少し奇妙だと思います。制御エンコーディングを設定せず、retrieveFile を使用して、Java で通常の文字列を送信するだけです。また、この行:

ftpClient.retrieveFile(new String(remoteFileName.getBytes("ms932"),"ISO-8859-1"), fos);

別の文字列から新しい Java 文字列を作成しているため、何もしません。Java 文字列は別のエンコーディングでメモリに保持されます。私の間違いでなければ、すべてのエンコーディングと互換性があります。

また、使用しているパスが間違っています。次を参照してください。

String remoteFileName = "//ftpserver.zip";

/ でパスを開始すると、FTP でエラーが発生します。次のようにしてください。

"ftpserver.zip"

または、サブディレクトリがある場合は、これを試してください:

"subdir/myfile.zip"

乾杯

于 2011-09-26T18:31:34.857 に答える
1

最近、同じエラーが発生しましたが、これは主にパスが正しくなく、/ data / csms / trt / file.txtのようにスラッシュを追加する代わりに、/ data / csms/trtfile.txtとして追加されていたためです...そのため、ファイルは目的の場所から取得されていませんでした。

于 2012-04-16T10:04:08.037 に答える
0

SDCARD / PHONEメモリにスペースがなかったため、同じ問題が発生しました。

于 2016-01-24T06:54:49.147 に答える
0

出力パスが正しくないようです。サーバーの共有ルート ディレクトリを確認します。ルートが f:\ で、ファイルがこのルート ディレクトリにある場合は、次のようにするだけです。 `fos = new FileOutputStream("down.zip");

ファイルがルートのサブディレクトリ (f:\sub など) にある場合は、次のようにする必要があります。fos = new FileOutputStream("sub\\down.zip");

于 2013-11-04T22:46:00.373 に答える
0

このように、接続する前にsetControlEncodingを呼び出す必要があります

[...]
try {
    ftpClient.setControlEncoding("UTF-8");
    ftpClient.connect("192.168.1.102",2121);
    ftpClient.login("myusername", "12345678");
[...]
于 2013-02-08T16:46:11.240 に答える