2

複数のクライアントを含むアプリケーションを作成しています。1 つのクライアントが FTP を使用してサーバーにファイルをアップロードし、別のクライアントがそのファイルをダウンロードして削除します。ユーザーがポート転送する必要がないように、FTP サーバーを仲介者として使用して情報を交換しています。ファイルをアップロードする方法はわかりましたが、ファイルを削除する方法がわかりません。FTP を使用してファイルを削除するコマンドは次のとおりです。

DELE <filename>

私はそうしようとしましたが、成功しませんでした。これが私が試したコードです:

public static void deleteFile(String name) throws IOException
{
    URL url = new URL("ftp://a1111111:password@mywebsite.com/public_html/misc/screenshots/picture.png;type=i");
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(url.openConnection().getOutputStream()));
    writer.write("DELE picture.png");
    writer.flush();
}

パスにディレクトリ名を含めていないため、指定した < filename > が間違っている可能性があります。ただし、URL でファイルのパスを明示的に指定したため、< ファイル名 > に何を入力すればよいかわかりません。

これと非常によく似た問題について、この Web サイトで他の質問を読みましたが、すべての回答でライブラリを使用するように指示されています。問題は、これらのライブラリのほとんどが純粋な Java で書かれているため、そのライブラリの開発者は、ライブラリなしで私がやろうとしていることを行う方法を見つけなければならなかったということです。私もそうしたいです。自分の作ったものに、自分のファイル以外のファイルを添付するのは好きではありません。ライブラリを使用するように言わないでください。それは私が探しているものではありません。

説明が必要な場合は、お尋ねください。

編集:このコードを使用して応答を受信した場合:

    byte[] response = new byte[conn.getInputStream().available()];
    conn.getInputStream().read(response);
    System.out.println("Response: " + new String(response));

私のコマンドはエコーバックされます:

Response: DELE test1.png
4

2 に答える 2

1

2 つの別々の操作で取得と削除を行う必要があると思います。私が見つけたランダムなドキュメントFtpURLConnectionの一部は、次のように述べています。

このクラスは、指定された URL で FTP 入力 (または出力) ストリームを開きます。ワンショット FTP 転送として機能します。

ログイン
ファイルを取得 (または配置)
切断

ドキュメントには、ファイルを削除できるメソッドはありませんでした。

このメカニズムを使用してファイルを取得したい場合もありURLますが、生のソケットを使用してファイルを削除することにします。FTP コマンド ポートへの新しい接続を作成し、ログインして、DELEコマンドを手動で発行します。これが唯一の手順である場合は、比較的貧弱なエラー処理を実行し、おそらく 2 つのread()要求のみを実行して、完了したら出力トランスクリプトをユーザーに表示するだけで済みます。

少し汚れていますが、道徳的に同等のものを達成するためにメガバイトの追加ソースを持ち歩きたくないということは完全に理解していecho -e "user foo\npass password\ndele /path/to/file\nlogout" | nc ftp.remote.example.com 21ます。

于 2012-04-17T03:24:03.823 に答える
-2

いくつかの FTP クライアントを使用して操作を実行できますか?

Apache commons-net からhttp://commons.apache.org/net/api-3.1/org/apache/commons/net/ftp/FTPClient.htmlを試すことができます。使いやすいです。

于 2012-04-17T05:48:43.067 に答える