質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

Q&A

解決済

1回答

4332閲覧

BufferedWriterで数値を.txtファイルに書き込むと文字化けが発生する

soshin

総合スコア11

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

0グッド

0クリップ

投稿2020/05/29 18:54

##前提・実現したいこと
失敗した回数を記録するファイルFaleCounter3.txtの読み書きがしたいです。
具体的には、FaleCounter3.txtの内容を読み込む→FaleCounter3.txtに書いてあった数に1を加算し、新しくFaleCounter3.txtを作りその数値を書き込むといった流れです。

##発生している問題
プログラムを実行したのちFaleCounter3.txtを確認すると、数値が文字化けしてしまっています。

##該当のソースコード

Java

1import java.io.*; 2import java.nio.*; 3 4public class FaleCounter3 { 5 public static void main(String[] args) { 6 7try{ 8 File file = new File("FaleCounter3.txt"); 9 file.createNewFile(); 10 BufferedReader br = new BufferedReader(new FileReader(file)); 11 12 String str = br.readLine(); 13 if (str == null){ 14 str = "0"; 15 } 16 int count = Integer.parseInt(str); 17 int faleCount = count + 1; 18 System.out.println("失敗回数:" + faleCount); 19 System.out.print(""); 20 FaleCounter3 f3 = new FaleCounter3(); 21 f3.Write(faleCount); 22 br.close(); 23}catch(FileNotFoundException e){ 24 System.out.println(e); 25}catch(IOException e){ 26 System.out.println(e); 27 } 28 } 29 30 public void Write (int faleCount) throws IOException{ 31 File file = new File("FaleCounter3.txt"); 32 file.delete(); 33 file.createNewFile(); 34 BufferedWriter bw = new BufferedWriter(new FileWriter(file)); 35 bw.write(faleCount); 36 bw.flush(); 37 bw.close(); 38 } 39}

textfile

11000

textfile

1ϩ

上のテキストファイルが実行前のもので、数を1000に指定しています。下が実行後のテキストファイルです。1001となっていて欲しいのですが、謎の文字になってしまっています。

##補足
開発環境はmacです。.javaファイルと.txtファイルの編集はVScodeで行っています。JDKは最新のものを使っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/05/29 22:57

そのテキストファイルの、書き込み前と書き込み後の内容を提示してください
soshin

2020/05/30 07:01

y_waiwai様 書き込み前と書き込み後の内容は、該当のソースコードの2個目と3個目にあります。 hoshi_takanori様 複数の文字を書き込むにはどうすればいいのでしょうか?
hoshi-takanori

2020/05/30 07:09

そのすぐ下に文字の配列や文字列を引数に取る write メソッドがありますよ。 とはいえ、普通は BufferedReader ではなく PrintWriter を使った方が簡単だと思います。print や println や printf メソッドがありますので。
soshin

2020/05/30 07:34

Writeメソッドの処理方法をBufferedWriterからPrintWriterに変えたらうまくいきました! ありがとうございます。 public void Write (int faleCount) throws IOException{ File file = new File("FaleCounter3.txt"); file.delete(); file.createNewFile(); PrintWriter pw = new PrintWriter(new FileWriter(file)); String StringFale = String.valueOf(faleCount); pw.write(StringFale); pw.flush(); pw.close(); } 何故PrintWriterでは文字化けせずにうまくいったのでしょうか?
guest

回答1

0

ベストアンサー

bw.write(faleCount);

int型の変数をそのまま出力してるためですね。
文字列に変換して書き込む必要があります

投稿2020/05/29 23:00

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問