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

时间:2012-03-08 15:58:48

标签: java file file-io new-operator fileoutputstream

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

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

9 个答案:

答案 0 :(得分:257)

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

答案 1 :(得分:37)

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

使用yourFile.getParentFile().mkdirs()

答案 2 :(得分:23)

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

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

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

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

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

答案 3 :(得分:20)

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

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

答案 4 :(得分:12)

来自apache commons的

FileUtils是一个很好的方法来实现这一目标。

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);

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

答案 5 :(得分:3)

如果不存在则创建文件。如果文件退出,请清除其内容:

/**
 * Create file if not exist.
 *
 * @param path For example: "D:\foo.xml"
 */
public static void createFile(String path) {
    try {
        File file = new File(path);
        if (!file.exists()) {
            file.createNewFile();
        } else {
            FileOutputStream writer = new FileOutputStream(path);
            writer.write(("").getBytes());
            writer.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

[TestNG][4]

答案 8 :(得分:0)

LazyList在大多数情况下会创建一个文件,但不幸的是,您会收到FileNotFoundException

  

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

from Javadoc

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

一种解决方案是删除对File API的所有调用,而改用Files API,因为它提供了更好的错误处理。通常用Stream替换任何new FileOutputStream(f)

在确实需要使用File API的情况下(例如,使用通过File使用的外部接口),使用new FileOutputStream(f)是确保正确创建文件的好方法,否则,知道为什么它不起作用。上面有人说这是多余的。的确如此,但是您会得到更好的错误处理,在某些情况下可能是必要的。