2016-12-11 10 views
0

Javaでのファイル書き込みに少し問題があります。Java - バッファリングされたWriterがキューブを書き込みません

File f = new File(path);と とBufferedWriterを使って新しいファイルを作成しました。そのファイルに書き込みます。そして1つint i = 1; 今バッファリングされたライター(ファイルライター)はファイル にint iを書き込むはずですが、それはCUBESに書き込みます! ■このようなもの。 スキャナはファイルを読み込み、それはキューブ、およびエラーが発生したことを読み取ると、ここで

は一例です:

int i = 1; 
File f = new File(path); 
BufferedWriter bw = new BufferedWriter(new FileWriter(f)); 
bw.write(i); 

int b = 0; 
Scanner s = new Scanner(new FileReader(f)); 
b = s.nextInt(); 
//end 

しかし、いくつかの理由では、数1にない■キューブを書き込み、理由ですスキャナは読むことができません。

これは何故ですか? - お手伝いします。 ■

+1

['BufferedWriter.write(int c)'](https://docs.oracle.com/javase/8/docs/api/java/io/BufferedWriter)のjavadocを*読み*ましたか? html#write-int-)メソッドを呼び出していますか?それは言う:*単一の文字を書き込みます*それは10進数の10進数を使用して番号を記述しません。そのためには、 'PrintWriter'を使用し、[print(int i)'](https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html#print- int-)。 – Andreas

+0

@Andreasボーナス質問:実際にベース10の数字を書いたければ、どの文字コードを使用するのですか(私はこれを推奨していません)? –

答えて

1

書き込みメソッドは、文字としての整数値を書き込みませんが、整数は文字コードとして解釈されます。

PrintWriterを使用する方が快適です。これで、System.outと同じ印刷方法を使用できます。

PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(f))); 
writer.print(i); 

また、あなたは暗黙的にLinux用のデフォルトのプラットフォームのWindows用CP1252(WindowsのANSI)でエンコーディング、通常はUTF-8を使用していることに、注意する必要があります。予期しない動作を避けるために、常に文字エンコーディングを明示的に設定することをお勧めします。次に、あなたは次のようになります:

PrintWriter writer = new PrintWriter(new BufferedWriter(
    new OutputStreamWriter(new FileOutputStream(f), "UTF-8"))); 

これは少し複雑ですが、ファイルのエンコードはあなたの制御下にあります。

+0

はい、それが私の必要です。それは素晴らしい、動作します。なぜ私は否定的な投票をしたのですか?そして助けてくれてありがとう! –

関連する問題