我正在做以下事情: - 创建一个空文件 - 锁定文件 - 写入文件 - 回读内容
public class TempClass {
public static void main(String[] args) throws Exception{
File file = new File("c:/newfile.txt");
String content = "This is the text content123";
if (!file.exists()) {
file.createNewFile();
}
// get the content in bytes
byte[] contentInBytes = content.getBytes();
FileChannel fileChannel = new RandomAccessFile(file, "rw").getChannel();
FileLock lock = fileChannel.lock();
//write to file
fileChannel.write(ByteBuffer.wrap (contentInBytes));
//force any updates to this channel's file
fileChannel.force(false);
//reading back file contents
Double dFileSize = Math.floor(fileChannel.size());
int fileSize = dFileSize.intValue();
ByteBuffer readBuff = ByteBuffer.allocate(fileSize);
fileChannel.read(readBuff);
for (byte b : readBuff.array()) {
System.out.print((char)b);
}
lock.release();
}
}
但是我可以看到文件是用我指定的内容正确编写的,但是当我读回来时,它会为文件中的所有实际字符打印方形字符。该方形字符等于字节0的char
:
System.out.print((char)((byte)0));
这里有什么问题?
答案 0 :(得分:2)
当回读文件时,您没有重置FileChannel当前所处的位置,因此在执行时
fileChannel.read(readBuff);
由于FileChannel位于文件的末尾(导致打印代码显示0初始值),因此没有任何内容分配给缓冲区。
执行:
fileChannel.position(0);
将FileChannel重置为文件的开头。