2013-11-22 74 views
0

我正在接收來自服務器的文件,並且在客戶端中我想將此文件保存到目錄。這裏是做保存文件爲什麼我在文件中收到垃圾數據?

  FileDetails obj1= (FileDetails)object; 
      String str= "A "+obj1.fileExtension+" Received From "+obj1.source; 
      JOptionPane.showMessageDialog(null,str,"Success", WIDTH, null); 
      FileOutputStream saveFile = new FileOutputStream("F:\\Download\\"+obj1.fileExtension); 
      ObjectOutputStream save = new ObjectOutputStream(saveFile); 
      byte[] buf= convertToByteArray(obj1.file); 
      save.write(buf); 
      save.close(); 

功能convertToByteArray的工作代碼如下

private byte[] convertToByteArray(File file){  
     try{ 
     FileInputStream fis = new FileInputStream(file); 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     byte[] buf = new byte[1024]; 

     for (int readNum; (readNum = fis.read(buf)) != -1;) { 
      bos.write(buf, 0, readNum); //no doubt here is 0 
      bos.flush(); 
      System.out.println("read " + readNum + " bytes,"); 
     } 
     byte[] bytes = bos.toByteArray(); 
    return bytes; 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
     return null; 
    } 

FileDetails是其中包含服務器發送的文件,並在fileExtension文件名Serializable對象。該類如下 -

public class FileDetails implements Serializable{ 
    public File file; 
    public String fileExtension; 
    public String source; 
    public String destination; 

} 

現在問題是我得到垃圾數據在客戶端保存的文件。爲了測試我是否從服務器接收純數據,我在控制檯中打印了文件的內容並獲得了預期結果。但是當我在指定的目錄中打開保存的文件時,我得到一些中文腳本我該怎麼辦?請幫助我。

+0

不要將文件讀入字節[]。如果您不能100%確定大小,可能會導致OutOfMemoryErrors –

+0

我假設要保存的文件在1KB以內。如果我想變得更強壯,我該怎麼辦?在這種特殊情況下字節數組的交替是什麼? – Burro

回答

2

部分原因是,我認爲,尋找在記事本中的文件中。如果我在另一個編輯器中打開文件,使用二進制模式說TextPad,我看到該文件以序列化標題開頭。使用ObjectOutputStream將文件的二進制數據作爲對象進行串行化。我想你想要做的是去除的ObjectOutputStream行,而不是將其更改爲以下:

FileOutputStream saveFile = new FileOutputStream("F:\\Download\\"+obj1.fileExtension); 
//ObjectOutputStream save = new ObjectOutputStream(saveFile); 
byte[] buf= convertToByteArray(obj1.file); 
saveFile.write(buf); 
saveFile.close(); 

這將寫出來的字節只有文件。

+0

非常感謝。根據你的建議修正了我的代碼,並把事情搞定了! :) – Burro

+0

很高興你的工作!你介意接受這個正確答案嗎? – mttdbrd

+0

我已將它標記爲接受的答案。再次感謝好友! :) – Burro