如何锁定文件然后清除其内容并写入?清除文件可以很简单:
FileOutputStream fos = new FileOutputStream(someFileObject);
获得锁定将是:
FileLock lock = fos.getChannel().lock();
但我需要的是在清除之前锁定文件,因为我不想在程序获取文件锁之前进行任何编辑。
我尝试使用2个FileOutputStream对象,其中一个设置为append,仅用于锁定,另一个使用append设置为false以清除文件,如下所示:
File log = new File("test.txt");
try (FileOutputStream forLocking = new FileOutputStream(log, true)) {
FileChannel fileChannel = forLocking.getChannel();
FileLock lock = fileChannel.lock();
try (FileOutputStream fos = new FileOutputStream(log); PrintWriter out = new PrintWriter(fos);) {
out.println("Test this stuff");
}
} catch (IOException e) {
e.printStackTrace();
}
但显然只有拥有锁的频道才能在同一个jvm中对它进行任何更改。
无论如何我无需删除文件并重新创建它就能解决这个问题吗?
我很感激帮助。
@Roman Puchkovskiy我知道如何锁定。我知道如何清除文件。我的问题是如何获得锁定然后按相应的顺序清除文件。您发送的链接完全没有帮助,但感谢您尝试。
答案 0 :(得分:0)
通过阅读文档,我发现您可以先创建RandomAccessFile
实例,然后在其上调用getChannel
。获得频道后,您可以lock
和channel.truncate(0)
清除其内容。然后,您可以通过调用channel.write(byteBuffer)
继续写入文件。
这就是我的意思:
RandomAccessFile raFile = new RandomAccessFile(filename, 'rw');
FileChannel fc = raFile.getChannel();
fc.lock();
fc.truncate(0);
fc.write(someBuffer);
raFile.close(); // Will release the lock.