ObjectOutput写入损坏的字节

时间:2014-07-03 17:45:28

标签: java file-io ftp

所以我想要完成的是在我的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();

3 个答案:

答案 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。