如何将代码页1250的字符串保存到java中的RandomAccessFile中

时间:2011-05-31 09:28:55

标签: java file

我的文本文件包含字符串,代码页是1250.我想将文本保存到RandomAccessFile中。当我从RandomAccessFile读取字节时,我得到不同字符的字符串。一些解决方案......

2 个答案:

答案 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());
}