1

整数配列をファイルに出力しようとしていて、問題が発生しました。コードは適切に実行され、エラーはスローされませんが、1 ~ 30 の数字を含むファイルが返される代わりに、[] [] [] [] [] で満たされたファイルが返されます。問題を含まれているコード セグメントに切り分けました。

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 の値を含む配列です。さらに情報が必要な場合は、喜んで提供します。

4

5 に答える 5

4

BufferedWriter.write(int)は、int 値ではなく、int の文字値を書き込みます。したがって、65 を出力すると文字Aがファイルに出力され、66 は B などと出力されます。Stringint 値ではなく値をストリームに書き込む必要があります。

代わりにBufferedWriter.write(java.lang.String)を使用してください

bw.write(String.valueOf(test));
于 2012-05-29T22:25:42.517 に答える
2

PrintStreamorPrintWriter代わりに使用することをお勧めします:

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();
于 2012-05-29T22:29:38.940 に答える
1

あなたが抱えている問題は、BufferedWriter.write(int)メソッドを使用していることです。あなたを混乱させているのは、メソッドの署名が を書いていることを示していますが、int実際にはその int がエンコードされた文字を表すことを期待していることです。つまり、書き込み0は書き込みNULであり、書き込み65は を出力します'A'

ライターのjavadocから:

public void write(int c) throws IOException

1 文字を書き込みます。書き込まれる文字は、指定された整数値の下位 16 ビットに含まれます。上位 16 ビットは無視されます。

問題を修正する簡単な方法は、書き込む前に数値を文字列に変換することです。これを実現するには、次のようなさまざまな方法があります。

int test = 42;
bw.write(test+"");
于 2012-05-29T22:26:41.717 に答える
0

整数配列をバイト配列に変換して、次のようにすることができます。

public void saveBytes(byte[] bytes) throws FileNotFoundException, IOException {
 try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(filepath))) {
   out.write(bytes);
 }
}
于 2012-05-29T22:24:23.853 に答える
0

数値を整数としてファイルに書き込みますが、それを文字列にしたいとします。bw.write(test);に変更bw.write(Integer.toString(test));

于 2012-05-29T22:25:18.910 に答える