我找过答案了(我相信它们在那里),但我不确定是否可能。
所以,我得到了一个包含单词“för”的巨大文件。我正在使用RandomAccessFile,因为我知道它在哪里(有点)并且因此可以使用seek()函数到达那里。
为了知道我已经找到它,我在程序中有一个字符串“för”,我检查它是否相等。问题在于,当我到达“för”时,我得到的比较对象是"för"。
因此,我的程序在没有找到任何“för”的情况下终止。
这是我用来获取单词的代码:
private static String getWord(RandomAccessFile file) throws IOException {
StringBuilder stb = new StringBuilder();
String word;
char c;
c = (char)file.read();
int end;
do {
stb.append(c);
end = file.read();
if(end==-1)
return "-1";
c = (char)end;
} while (c != ' ');
word = stb.toString();
word.trim();
return word;
}
基本上,我将从文件中的当前点返回所有字符到第一个“-”字符。所以我基本上获取了这个单词,但由于(char) file.read();读取一个字节(我想),UTF-8 'ö'成为两个字符'Ã'和'¶'?
猜测其中一个原因是,如果我使用UTF-8编码打开文件,它是“för”,但如果我在同一位置使用ISO-8859-15打开文件,则现在正好有我的getWord方法返回的内容:“för”
所以我的问题是:
当我拥有“för”和“för”时,是否有任何方法可以解决这个问题?比如说,“将“för”读作UTF-8字符串”,以获取“för”?
(char)file.read()
。read()
方法不会返回一个char
,它返回一个byte
。不要将byte
强制转换为char
。--- 为什么不使用更有帮助的FileReader
而是使用RandomAccessFile
,后者可以自动将字节转换为字符? - Andreas