使用Java从FTP服务器删除文件

时间:2012-04-17 02:47:41

标签: java ftp delete-file

我正在编写涉及多个客户端的应用程序。一个客户端使用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();
}

我有一种感觉&lt;文件名&gt;我提供的可能是错的,因为我没有在路径中包含目录名称。但是,由于我明确告诉URL中文件的路径,我不太确定我应该为&lt; filename&gt;。

我在本网站上已经阅读了与此非常相似的问题以及所有回复告诉使用库的其他问题。问题是,这些库中的大多数是用纯Java编写的,因此该库的开发人员必须找到一种方法来完成我在没有库的情况下尝试做的事情。我也想这样做。我不喜欢将我自己以外的额外文件附加到我制作的东西上。所以,请不要告诉我使用图书馆 - 它不是我想要的。

如果您需要任何澄清,请询问!

编辑:如果我使用此代码接收回复:

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

我的命令得到回应:

Response: DELE test1.png

2 个答案:

答案 0 :(得分:1)

我认为你需要在两个单独的操作中进行检索和删除; some random documentation I found for FtpURLConnection部分地说:

  

此类在给定URL的情况下打开FTP输入(或输出)流。它可以作为一次性FTP传输:

     

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

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

您可能希望使用URL机制来检索文件,但我会使用原始套接字来删除文件。创建与FTP命令端口的新连接,登录并手动发出DELE命令。如果这是您正在采取的唯一步骤,那么您可能能够完成相对较差的错误处理,并且可能只需要两个read()请求,并在完成后向用户显示输出记录。< / p>

这有点脏,但我完全理解不想携带一兆字节的额外资源来实现道德等同于echo -e "user foo\npass password\ndele /path/to/file\nlogout" | nc ftp.remote.example.com 21

答案 1 :(得分:-2)

您可以使用某些FTP客户端进行操作吗?

您可以从Apache commons-net尝试http://commons.apache.org/net/api-3.1/org/apache/commons/net/ftp/FTPClient.html。它易于使用。