【发布时间】:2017-06-24 18:12:37
【问题描述】:
我怎样才能锁定一个文件然后清除它的内容并写入它?清除文件可以很简单:
FileOutputStream fos = new FileOutputStream(someFileObject);
获取锁将通过:
FileLock lock = fos.getChannel().lock();
但我需要在清除文件之前锁定文件,因为我不希望在程序获得文件锁定之前进行任何编辑。
我尝试使用 2 个 FileOutputStream 对象,其中一个设置为追加,仅用于锁定,另一个将追加设置为 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();
}
但显然只有拥有锁的 Channel 至少可以在同一个 jvm 中对其进行任何更改。
有没有我可以在不必删除文件并重新创建它的情况下进行此操作?
感谢您的帮助。
@Roman Puchkovskiy 我知道如何锁定。我知道如何清除文件。我的问题是如何获得锁,然后按相应的顺序清除文件。您发送的链接完全没有帮助,但感谢您的尝试。
【问题讨论】: