2013-07-12 64 views
0

我是很新,JAVA,所以我真的不明白我下面的方法中做錯了:不工作的I/O方法

public void writeWNDFile(){ 
     String strFilePath = "C:/Users/fperrone/Desktop/ddd.txt"; 
     try 
     { 
      //create FileOutputStream object 
      FileOutputStream fos = new FileOutputStream(strFilePath); 

      DataOutputStream dos = new DataOutputStream(fos); 
      dos.writeDouble(12);    
      dos.close(); 
     } 
     catch (IOException e) 
     { 
      System.out.println("IOException : " + e); 
     } 
    } 

實際產生的文件,但我不」得到12作爲打印和預期的結果,但@(,這可能是ASCII表示。

請問您能否點亮一下?

編輯

最終是否存在JAVA功能類似行爲的MATLABfwrite功能?我其實想寫一個二進制文件。在MATLAB我只是呼籲:

fwrite(filename, A, precision) 

我怎麼能達到同樣的JAVA

+1

使用'PrintStream'而不是'DataOutputStream'。 – johnchen902

回答

1

writeDouble java docs

雙參數轉換爲一個長使用中的doubleToLongBits 方法在類雙,然後寫入該長值到 作爲一個8字節的數量基本輸出流,高字節第一。

由於DataOutputStream使用二進制格式編寫,因此您看到相同。但是,如果要使用DataInputStream和readDouble方法再次讀取文件,則需要擔心。它應該給你正確的價值。

+1

@TheNewIdiot他*已*解釋它。 「二進制格式」的哪部分你不瞭解? – EJP

+0

@TheNewIdiot因此您的評論已過時。 – EJP

+0

@EJP是的,甚至是你的! – NINCOMPOOP

1

DataOutputStream.writeDouble和其他方法DataOutputStream被設計爲以二進制格式編寫數字。如果您希望以文本格式保存數據,請使用FileWriter及其write(String)方法。您可以用Double.toString(double)double轉換爲String

0
//PrintWriter out = new PrintWriter(new BufferedWriter(
    // new OuputStreamWriter(new FileOutputStream(strFilePath) /*, "UTF-8"*/))); 
    PrintWriter out = new PrintWriter(strFilePath /*, "UTF-8"*/); 
    out.println(12); 
    out.close(); 

當您希望應用程序在任何地方使用相同的編碼寫入時,添加編碼,這裏是UTF-8。否則使用默認的平臺編碼。

PrintWriterprintln不添加換行符,print不是。