2

我正在编写一个涉及多个客户端的应用程序。一个客户端使用 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 中明确告诉了文件的路径,所以我不太确定应该为 < 文件名 > 输入什么。

我已经阅读了该网站上关于与此非常相似的问题的其他问题,并且所有回复都告诉使用图书馆。问题是,这些库中的大多数都是用纯 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

我认为您需要在两个单独的操作中进行检索和删除;我找到的一些随机文档FtpURLConnection部分说:

此类打开给定 URL 的 FTP 输入(或输出)流。它作为一次性 FTP 传输工作:

登录
获取(或放置)文件
断开连接

我在文档中没有看到任何允许删除文件的方法。

您可能希望使用该URL机制来检索文件,但我会选择使用原始套接字来删除文件。创建到 FTP 命令端口的新连接,登录并DELE手动发出命令。如果这是您要采取的唯一步骤,您可能能够摆脱相对较差的错误处理,也许只有两个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 回答