2014-07-03 227 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