В ASCII нет такого понятия, как "персонаж 147".
Вы должны указать конкретную кодировку, которая может представлять интересующие вас символы - обычно UTF-8 - хороший выбор - и использовать одну и ту же кодировку как для чтения, так и для записи.
К сожалению, FileWriter
и FileReader
не позволяют указывать кодировку, поэтому вам понадобится FileOutputStream
и FileInputStream
, завернутые в OutputStreamWriter
и InputStreamReader
:
import java.io.*;
import java.nio.charset.*;
public class Test {
private static Charset UTF8 = Charset.forName("UTF-8");
public static void main(String args[]) throws IOException {
writeFile("./test.txt");
readFile("./test.txt");
}
public static void writeFile(String path) throws IOException {
Writer writer = new OutputStreamWriter(new FileOutputStream(path), UTF8);
try {
writer.write((char) 147);
} finally {
writer.close();
}
}
public static void readFile(String path) throws IOException {
Reader reader = new InputStreamReader(new FileInputStream(path), UTF8);
try {
int c = reader.read();
System.out.println(c);
} finally {
reader.close();
}
}
}