プロが教えるわが家の防犯対策術!

プログラミングを始めたばかりの初心者で、行き詰っていることがあります。
Windows環境でjavaのプログラミングをしています。(JDK1.7.0_03)
InputFileというファイルを、指定したバイト単位で文字を切り出し、新たなOutputFileという
ファイルに書き出したいのですが、以下の例のように、全角マイナスだけが?と表示されて
しまい、うまくいきません。
InputFile

田中太郎 tanaka tarou  タナカタロウ 田中町1-1-1 06011112222・・・
吉田花子 yoshida hanako ヨシダハナコ 吉田町2-2-2 01011113333・・・
山田良子 yamada yoshiko ヤマダヨシコ 山田町3-3-3 02011115555・・・

OutputFile

田中太郎 tanaka tarou  タナカタロウ 田中町1?1?1 06011112222・・・
吉田花子 yoshida hanako ヨシダハナコ 吉田町2?2?2 01011113333・・・
山田良子 yamada yoshiko ヤマダヨシコ 山田町3?3?3 02011115555・・・

お見せするのも恥ずかしい滅茶苦茶なソースかもしれませんが現状は以下の通りです。
どなたか教えていただけないでしょうか。よろしくお願い致します。
(読み込むInputFileというファイルの文字コードはEUCです。)

ソース

import java.io.*;

class ReadTest{
static LineNumberReader inr;
static InputStreamReader isr;
static String FN = "InputFile";
static OutputStreamWriter osw;

public static void main(String[] args) {
String line;
try {

FileInputStream fis = new FileInputStream(FN);
isr = new InputStreamReader(fis,"EUC_JP");

inr = new LineNumberReader(new BufferedReader(isr));

FileOutputStream fos = new FileOutputStream("OutputFile");
osw = new OutputStreamWriter(fos,"EUC_JP");

BufferedWriter bw = new BufferedWriter(osw);

while ((line = inr.readLine()) != null) {
bw.write(new String(line.getBytes(),0,120));
bw.newLine();
}
System.out.println(inr.getLineNumber() + "件読み込み完了");

fis.close();
isr.close();
bw.close();
fos.close();
} catch (IOException e) {
System.out.println(e);
}
}
}

A 回答 (1件)

試してみましたが私の環境では化けませんでした。


ただし、全角マイナスは注意が必要な文字です。http://www.atmarkit.co.jp/fjava/rensai3/mojibake …の質問2を参照してください。

全角マイナスとは別に質問文にあるコードで気になったのはnew String(line.getBytes(),0,120)の部分です。
line.getBytes()した結果の先頭から120バイトだけを使ってnew String()していますが、それだと複数バイトで表される文字の途中でぶった切ってしまうおそれがあります。決まった文字数で切り揃えたいのであればline.substring(0, n)を使ったほうがいいのではないでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!