使用 RandomAccessFile 时读取文件乱码
Read file garbled when using RandomAccessFile
首先,我使用这段代码在一个文件中写了两行:
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());
可以看出写行分隔符完全是浪费时间space。
简而言之,writeUTF()
写入的数据只能被readUTF()
读取。
查看 Javadoc。
首先,我使用这段代码在一个文件中写了两行:
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());
可以看出写行分隔符完全是浪费时间space。
简而言之,writeUTF()
写入的数据只能被readUTF()
读取。
查看 Javadoc。