Java固定长度随机访问文件

时间:2013-08-24 20:09:53

标签: java file storage

我刚看了youtube上的一个教程,展示了如何在java中创建固定长度的随机访问文件。我对writeBytes类中RandomAccessFile方法的概念略感混淆。

// Create an instance of the RandomAccessFile class
RandomAccessFile raf = new RandomAccessFile("RAF1.dat", "rw");
// Get the length of the file so new entries
// Are added at the end of the file
raf.seek(raf.length());
// Max input length of the persons name
int recordLength = 20;
// Each record will have a byte length of 22
// Because writeUTF takes up 2 bytes
int byteLength = 22;

// Just a random name to stick in the file
String name = "John";

// Write the UTF name into the file
raf.writeUTF(name);

// Loop through the required whitespace to
// Fill the contents of the record with a byte
// e.g recordLength - nameLength (20 - 4) = 16 whitespace
for (int i = 0; i < recordLength - name.length(); i++) {
    raf.writeByte(10);
}

上面是我用来写入随机访问文件的代码。如你所见,我正在使用raf.writeByte(10);为了填补记录中的空白。

raf.writeByte(10);在文件中存储以下内容:Ѐ潊湨ਊਊਊਊਊਊਊਊ

但是当我将raf.writeByte(10);更改为raf.writeByte(0);并创建新文件时...

raf.writeByte(0);在新文件中存储以下内容:John

你可能无法在这里正确看到它,但在John之后有空格并且名称实际上是可读的。

你能解释一下为什么使用0字节和10字节会有这么大的差异吗?您还可以建议我对代码进行任何改进。

非常感谢,感谢您的帮助:)。

2 个答案:

答案 0 :(得分:1)

您正在尝试使用ASCII编写新行(不是空格) - 请参阅this table

但是,您选择的UTF编码可能不是8位,而您只编写8位,因此2位或更多8位的组合会产生一些奇怪的符号。

0只写空,而不是新行或空格。

请改为尝试:

raf.writeChar(' ');

答案 1 :(得分:0)

在两种情况下(raf.writeByte(10);raf.writeByte(0);)都会将“John”的字节写入您的文件。但是,您的文本编辑器选择以不同方式解释文件。使用十六进制编辑器查看真正正在编写的内容。