所以我想要完成的是在我的FTP服务器上创建一个新文件,然后写入该文件。这是我的代码
try {
URL url = new URL("ftp://" + user + ":" + pass + "@127.0.0.1/myFile.txt;type=i");
URLConnection urlc = url.openConnection();
OutputStream os = urlc.getOutputStream();
OutputStream buffer = new BufferedOutputStream(os);
ObjectOutput output = new ObjectOutputStream(buffer);
//I Write Here
buffer.close();
os.close();
output.close();
} catch (Exception e) {
e.printStackTrace();
}
无论我如何写文件
output.writeBytes("Hello World");
output.writeChars("Hello World");
output.writeUTF("Hello World");
output.writeObject("Hello World");
输出
’
此外,一切正常,但我在我的控制台中得到了这个
java.net.SocketException: Socket closed
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:116)
at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
at java.io.FilterOutputStream.flush(FilterOutputStream.java:140)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:141)
at java.io.ObjectOutputStream$BlockDataOutputStream.flush(ObjectOutputStream.java:1823)
at java.io.ObjectOutputStream.flush(ObjectOutputStream.java:719)
at java.io.ObjectOutputStream.close(ObjectOutputStream.java:740)
at test.Upload.main(Upload.java:30)
这是正常的吗?
第30行是:
output.close();
答案 0 :(得分:1)
您正在以错误的顺序关闭流。始终靠近"顶部" down(在这种情况下,ObjectOutputStream是" top")。
当您致电buffer.close()
时,您关闭了底层套接字。 ObjectOutputStream.close()
方法想要在关闭之前写入其他信息,但是在您调用output.close()
时套接字将关闭。
答案 1 :(得分:0)
我认为至少你需要先创建一个File对象。
试试看: http://www.dreamincode.net/forums/topic/32031-ftp-in-java-using-apache-commons-net/
编辑:显然使用url连接类本身应该可行。我认为你的问题是你的ftp服务器本身。您使用网址连接的问题是您无法看到服务器给您的响应
答案 2 :(得分:0)
除非您计划使用ObjectInputStream编写对象并读取流,否则不要使用ObjectOutputStream。它为每次写入添加了一些自己的协议。
使用DataOutputStream。