如果具有给定名称的文件已经存在,我想创建一个用于写入的文件并获取异常。我正在寻找一个线程安全的实现,并希望在 Java 标准库中。我找到的最接近的电话是:
FileOutputStream fos = new FileOutputStream("/some/file/path.txt");
但这会截断同名的现有文件。如果已经有同名文件,是否有任何方法会引发异常或以其他方式返回错误?
尝试使用 File 类和createNewFile。
以下解决方案是线程安全的:
File file = new File("/some/file/path.txt");
if (file.createNewFile()) {
// Succesfully created a new file
FileOutputStream fos = new FileOutputStream(file);
try {
// Do something with outputstream
} finally {
try { fos.close(); } catch (IOException exception) { }
}
}
这是您想要的方法:File.createNewFile
当且仅当具有此名称的文件尚不存在时,以原子方式创建一个以此抽象路径名命名的新的空文件。检查文件是否存在以及如果文件不存在则创建文件是单个操作,相对于可能影响文件的所有其他文件系统活动而言是原子操作。
你可以
由于第三步在操作系统中是原子的,因此它的线程和进程是安全的。
File f = new File("/some/file/path.txt");
if(f.exists())
{
//delete the file
}
else
{
//create and do what you want
}
是的,还有另一种方法,它也很容易与您的代码集成:
synchronized(this) {
File f = new File("path");
if (f.exists())
throw new FileExistsException();
else {
FileOutputStream fos = new FileOutputStream(f);
...
}
}