我的文本文件包含字符串,代码页是1250.我想将文本保存到RandomAccessFile中。当我从RandomAccessFile读取字节时,我得到不同字符的字符串。一些解决方案......
答案 0 :(得分:2)
如果你正在使用writeUTF()
,那么你应该阅读它的JavaDoc以了解它总是写modified UTF-8。
如果你想使用其他编码,那么你必须“手动”进行编码,并以某种方式存储byte[]
的长度。
例如:
RandomAccessFile raf = ...;
String writeThis = ...;
byte[] cp1250Data = writeThis.getBytes("cp1250");
raf.writeInt(cp1250Data.length);
raf.write(cp1250Data);
阅读同样有效:
RandomAccessFile raf = ...;
int length = raf.readInt();
byte[] cp1250Data = new byte[length];
raf.readFully(cp1250Data);
String string = new String(cp1250Data, "cp1250");
答案 1 :(得分:0)
此代码将使用1250代码页编写和读取字符串。当然,在放入产品之前,您需要清理它,检查异常并正确关闭流:)
public static void main(String[] args) throws Exception {
File file = new File("/toto.txt");
String myString="This is a test";
OutputStreamWriter w = new OutputStreamWriter(new FileOutputStream(file), Charset.forName("windows-1250"));
w.write(myString);
w.flush();
CharBuffer b = CharBuffer.allocate((int)file.length());
new InputStreamReader(new FileInputStream(file), Charset.forName("windows-1250")).read(b);
System.out.println(b.toString());
}