我正在编写涉及多个客户端的应用程序。一个客户端使用FTP将文件上传到服务器,然后另一个客户端下载该文件并将其删除。我使用FTP服务器作为中间人来交换信息,因为我不希望用户必须前移端口。我已经想出了如何上传文件,但我无法弄清楚如何删除文件。使用FTP删除文件的命令是:使用Java从FTP服务器删除文件
DELE <filename>
我试过这样做,但没有成功。这里是我试过的代码:我有一种感觉,<文件名>我提供的可能是错误的,因为我并没有包括在路径的目录名
public static void deleteFile(String name) throws IOException
{
URL url = new URL("ftp://a1111111:[email protected]/public_html/misc/screenshots/picture.png;type=i");
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(url.openConnection().getOutputStream()));
writer.write("DELE picture.png");
writer.flush();
}
。但是,由于我明确告诉URL中文件的路径,所以我不太确定我应该为<文件名>输入什么内容。
我已经阅读了本网站上有关与此非常相似的问题的其他问题,并且所有的答案都告诉了使用一个库。问题是,大多数这些库都是用纯Java编写的,因此该库的开发人员必须找出一种方法来实现我在没有库的情况下要做的事情。我也想这样做。我不喜欢附加额外的文件,除了我自己的东西,我做的。所以,请不要告诉我使用库 - 这不是我要找的。
如果您需要任何澄清,请询问!
编辑:如果我使用此代码收到答复:
byte[] response = new byte[conn.getInputStream().available()];
conn.getInputStream().read(response);
System.out.println("Response: " + new String(response));
我的命令只是获取回送:
Response: DELE test1.png
你确信你可以从一个有趣的'URL'对象实际运行多个FTP命令('GET' _and_'DELE')吗?这对我来说似乎不太可能。抛出什么异常或服务器的回复是什么? (如果你还没有运行Wireshark来观察事务) – sarnold 2012-04-17 02:52:25
我不确定这是否正常,但是在写入DELE命令后,我从通过连接建立的输入流中收到68。编辑:在用不同的代码尝试响应之后,输入流只是回应我写入的内容。 – 2012-04-17 03:02:59
'68'?那很好笑。 [FTP状态码长度为三位数字。](http://www.ietf.org/rfc/rfc959.txt)。 – sarnold 2012-04-17 03:08:49