2014-07-03 228 views
0

所以我试图完成的是在我的FTP服务器上创建一个新文件,然后写入文件。这里是我的代码ObjectOutput写入损坏字节

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

显示“我写在这里”代码的其余部分,或者至少如何管理流和连接。 – jtahlborn

回答

0

除非您打算编写对象并使用ObjectInputStream读取流,否则不要使用ObjectOutputStream。它在每次写入时添加一个自己的小协议。

使用DataOutputStream。

+0

将ObjectOutputStream更改为DataOutputStream,然后使用writeBytes(“”);奇迹般有效。谢谢 – user3802261

1

您正在以错误的顺序关闭您的流。总是关闭“顶部”(在这种情况下,ObjectOutputStream是“顶部”)。

当您致电buffer.close()时,请关闭底层套接字。方法ObjectOutputStream.close()想要在关闭前写入其他信息,但在调用output.close()时关闭套接字。

+1

或者只关闭ObjectOutputStream并依靠它传播。 – kdgregory

+0

@kdgregory - 那也是。 – jtahlborn