2012-05-29 81 views
1

我試圖輸出一個整數數組到文件並遇到了一個障礙。該代碼正確執行,沒有錯誤拋出,但沒有給我一個包含數字1-30的文件,它給了我一個充滿[] [] [] [] []的文件。我已經將問題隔離到包含的代碼段中。Java輸出整數到文件

try 
     { 
     BufferedWriter bw = new BufferedWriter(new FileWriter(filepath)); 
     int test=0; 
     int count=0; 
     while(count<temps.length) 
     { 
      test=temps[count]; 
      bw.write(test); 
      bw.newLine(); 
      bw.flush(); 
      count++; 
     } 
     } 
     catch(IOException e) 
     { 
      System.out.println("IOException: "+e); 
     } 

filepath指的是輸出文件的位置。 temps是包含值1-30的數組。如果需要更多信息,我會很樂意提供。

+0

你能確認你想有一個包含人類可讀的數據「文本」文件,而不是一個二進制文件? –

+0

輸出文件應該是一個可讀的「文本」文件 – MFrantz

回答

0

您可以在整數數組轉換爲字節數組,做這樣的事情:

public void saveBytes(byte[] bytes) throws FileNotFoundException, IOException { 
try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(filepath))) { 
    out.write(bytes); 
} 
} 
0

你寫的數字作爲整數的文件,但你希望它是一個字符串。 change bw.write(test); to bw.write(Integer.toString(test));

1

您所遇到的問題是,你正在使用的BufferedWriter.write(int)方法。令人困惑的是,雖然方法簽名表明它正在編寫一個int,但它實際上期望該int代表一個編碼字符。換言之,編寫0正在編寫NUL,並且編寫65將輸出'A'

Writer's的javadoc:

public void write(int c) throws IOException 

寫入單個字符。要寫入的字符包含在給定整數值的16個低位中; 16位高位被忽略。

解決您的問題的一種簡單方法是在寫入之前將數字轉換爲字符串。有許多方法來實現這一目標,其中包括:

int test = 42; 
bw.write(test+""); 
2

我建議使用PrintStreamPrintWriter代替:

PrintStream ps = new PrintStream(filePath, true); // true for auto-flush 
int test = 0; 
int count = 0; 
while(count < temps.length) 
{ 
    test = temps[count]; 
    ps.println(test); 
    count++; 
} 
ps.close();