首先,我使用此代码在文件中写入两行:
String lineSeparator = System.getProperty("line.separator", "\n");
String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "test1.txt";
RandomAccessFile randomAccessFile = new RandomAccessFile(filePath, "rw");
randomAccessFile.writeUTF("aaaaaaaaaaaaaaaaaaaaa");
randomAccessFile.write(lineSeparator.getBytes());
randomAccessFile.writeUTF("bbbbbbbbbbbbbbbbbbbb");
randomAccessFile.write(lineSeparator.getBytes());
randomAccessFile.close();
写入文件后,我读取了文件:
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");
int i = 0;
String line;
while ((line = randomAccessFile.readLine()) != null) {
Log.i("log", (i++)+" : "+line);
}
randomAccessFile.close();
但是奇怪的事情发生了,每一行都以��
开头,我不知道它是什么。
完整日志:
07-13 07:21:41.027 1138-1138/? I/log: 0 : ��aaaaaaaaaaaaaaaaaaaaa
07-13 07:21:41.027 1138-1138/? I/log: 1 : ��bbbbbbbbbbbbbbbbbbbb
乱码是什么,是行分隔符吗?还有,如何正确读取文件?
<小时/>我尝试使用 writeChars
而不是 writeUTF
,但日志中出现了更多乱码:
07-13 08:14:26.352 16821-16821/? I/log: 0 : ��a��a��a��a��a��a��a��a��a��a��a��a��a��a��a��a��a��a��a��a��a
07-13 08:14:26.352 16821-16821/? I/log: 1 : ��b��b��b��b��b��b��b��b��b��b��b��b��b��b��b��b��b��b��b��b
最佳答案
randomAccessFile.writeUTF("aaaaaaaaaaaaaaaaaaaaa");
randomAccessFile.write(lineSeparator.getBytes());
randomAccessFile.writeUTF("bbbbbbbbbbbbbbbbbbbb");
randomAccessFile.write(lineSeparator.getBytes());
randomAccessFile.close();
阅读该内容的唯一方法是:
String aaa = randomAccessFile.readUTF();
randomAccessFile.readFully(lineSeparator.getBytes());
String bbb = randomAccessFile.readUTF();
randomAccessFile.readFully(lineSeparator.getBytes());
可以看出,编写行分隔符完全是浪费时间和空间。
简而言之,writeUTF()
写入只能由readUTF()
读取的数据。
请参阅 Javadoc。
关于java - 使用RandomAccessFile读取文件乱码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45074169/