是否有一种方法来使用FileOutputStream的方式,如果一个文件(字符串文件名)不存在,那么它将创建它?

FileOutputStream oFile = new FileOutputStream("score.txt", false);

当前回答

只是提供了一种替代方法来创建文件,如果不存在使用路径和文件。

Path path = Paths.get("Some/path/filename.txt");
Files.createDirectories(path.getParent());
if( !Files.exists(path))
    Files.createFile(path);
Files.write(path, ("").getBytes());

其他回答

如果文件不存在且无法创建(doc),它将抛出FileNotFoundException,但如果可以,它将创建该文件。为了确保你可能应该在创建FileOutputStream之前首先测试文件是否存在(如果它不存在,则使用createNewFile()创建):

File yourFile = new File("score.txt");
yourFile.createNewFile(); // if file already exists will do nothing 
FileOutputStream oFile = new FileOutputStream(yourFile, false); 

只是提供了一种替代方法来创建文件,如果不存在使用路径和文件。

Path path = Paths.get("Some/path/filename.txt");
Files.createDirectories(path.getParent());
if( !Files.exists(path))
    Files.createFile(path);
Files.write(path, ("").getBytes());
File f = new File("Test.txt");
if(!f.exists()){
  f.createNewFile();
}else{
  System.out.println("File already exists");
}

将这个f传递给FileOutputStream构造函数。

new FileOutputStream(f)将在大多数情况下创建一个文件,但不幸的是,你会得到一个FileNotFoundException

如果文件存在但是目录而不是常规文件,不存在但不能创建,或由于任何其他原因无法打开

从Javadoc

换句话说,可能有很多情况下,您会得到FileNotFoundException,意思是“无法创建您的文件”,但您将无法找到文件创建失败的原因。

一种解决方案是删除对File API的任何调用,转而使用Files API,因为它提供了更好的错误处理。通常将任何新的FileOutputStream(f)替换为Files.newOutputStream(p)。

在确实需要使用File API的情况下(因为您使用了一个外部接口,例如使用File),使用Files.createFile(p)是确保正确创建文件的好方法,如果没有,您将知道为什么它不起作用。上面有人评论说这是多余的。这是真的,但是你得到了更好的错误处理,这在某些情况下可能是必要的。

如果文件不存在,您可能会得到一个FileNotFoundException。

Java文档说:

文件是否可用或是否可以创建取决于 底层平台 http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html

如果你使用的是Java 7,你可以使用Java。nio包:

options参数指定如何创建或打开文件…它打开文件进行写入,如果文件不存在则创建该文件… http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html