IT-Swarm.Net

Java FileOutputStream如果不存在则创建文件

有没有办法以一种方式使用FileOutputStream,如果文件(String filename)不存在,那么它会创建它吗?

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

如果文件不存在且无法创建( 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); 
253
talnicolas

在创建文件之前,需要创建所有父目录。

使用yourFile.getParentFile().mkdirs()

35
Kostiantyn Medvid

您可以创建一个空文件,无论它是否存在......

new FileOutputStream("score.txt", false).close();

如果你想保留文件,如果它存在...

new FileOutputStream("score.txt", true).close();

如果尝试在不存在的目录中创建文件,则只会获得FileNotFoundException。

23
Peter Lawrey
File f = new File("Test.txt");
if(!f.exists()){
  f.createNewFile();
}else{
  System.out.println("File already exists");
}

将此f传递给FileOutputStream构造函数。

20
Shashank Kadne

FileUtils 来自Apache commons是一种在单行中实现这一目标的好方法。

FileOutputStream s = FileUtils.openOutputStream(new File("/home/nikhil/somedir/file.txt"))

这将创建父文件夹(如果不存在)并创建文件(如果不存在)并在文件对象是目录或无法写入时抛出异常。这是 相当于

File file = new File("/home/nikhil/somedir/file.txt");
file.getParentFile().mkdirs(); // Will create parent directories if not exists
file.createNewFile();
FileOutputStream s = new FileOutputStream(file,false);

如果不允许当前用户执行操作,则上述所有操作都将抛出异常。

12
Nikhil Sahu

只有在使用Path和Files不存在的情况下,才提供另一种创建文件的方法。

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

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

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

来自Javadoc

我可能在其他Word中有很多情况会导致FileNotFoundException意味着“无法创建您的文件”,但您无法找到文件创建失败的原因。

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

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

0
stackoverflowed

如果文件不存在,您可能会获得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

0
sikander