java - linux创建文件 - scala创建文件夹




只有在不存在的情况下如何用Java创建文件? (4)

为什么你不能使用File#存在测试?

我想在Java中实现以下操作,我不知道如何:

/*
 * write data (Data is defined in my package)
 * to a file only if it does not exist, return success
 */
boolean writeData(File f, Data d)
{
    FileOutputStream fos = null;
    try 
    {
        fos = atomicCreateFile(f);
        if (fos != null)
        {
            /* write data here */
            return true;
        }
        else
        {
            return false;
        }
    }
    finally
    {
        fos.close();  // needs to be wrapped in an exception block
    }
}

是否有一个已经存在的函数,我可以用于atomicCreateFile()

编辑:呃哦,我不确定File.createNewFile()是否足以满足我的需要。 如果我调用f.createNewFile() ,然后在它返回的时间和我打开文件写入的时候,别人删除了文件呢? 有没有办法,我可以创建文件,并打开它写入+锁定,一举一举? 我需要担心这个吗?


//myFile should only be created using this method to ensure thread safety
public synchronized File getMyFile(){
  File file = new File("path/to/myfile.ext");
  if(!file.exists()){
     file.getParentFile().mkdirs();
     file.createNewFile();
  }
  return file;
}  

Java 7版本与文件#createFile

Path out;

try {
    out = Files.createFile(Paths.get("my-file.txt"));
} catch (FileAlreadyExistsException faee) {
    out = Paths.get("my-file.txt");
}

如果文件不存在, File.createNewFile()只会创建一个文件。

编辑:根据你想要锁定文件创建后的新的描述,你可以使用java.nio.channels.FileLock对象来锁定文件。 虽然没有像你所希望的那样创建和锁定一行。 另外,看到这个问题





file-io