Java FileOutputStream Create File if not exists

JavaFileFile IoNew OperatorFileoutputstream

Java Problem Overview


Is there a way to use FileOutputStream in a way that if a file (String filename) does not exist, then it will create it?

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

Java Solutions


Solution 1 - Java

It will throw a FileNotFoundException if the file doesn't exist and cannot be created (doc), but it will create it if it can. To be sure you probably should first test that the file exists before you create the FileOutputStream (and create with createNewFile() if it doesn't):

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

Solution 2 - Java

Before creating a file, it's necessary to create all parent directories.

Use yourFile.getParentFile().mkdirs()

Update: Create all parent folders only when they are not already exist. Otherwise it is not necessary.

Solution 3 - Java

FileUtils from apache commons is a pretty good way to achieve this in a single line.

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

This will create parent folders if do not exist and create a file if not exists and throw a exception if file object is a directory or cannot be written to. This is equivalent to:

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

All the above operations will throw an exception if the current user is not permitted to do the operation.

Solution 4 - Java

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

Pass this f to your FileOutputStream constructor.

Solution 5 - Java

You can create an empty file whether it exists or not ...

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

if you want to leave the file if it exists ...

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

You will only get a FileNotFoundException if you try to create the file in a directory which doesn't exist.

Solution 6 - Java

Create file if not exist. If file exits, clear its content:

/**
 * 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();
    }
}

Solution 7 - Java

Just Giving an alternative way to create the file only if doesn't exists using Path and Files.

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

Solution 8 - Java

You can potentially get a FileNotFoundException if the file does not exist.

Java documentation says:

> Whether or not a file is available or may be created depends upon the > underlying platform > http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html

If you're using Java 7 you can use the java.nio package:

> The options parameter specifies how the the file is created or opened... it opens the file for writing, creating the file if it doesn't exist... > > http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html

Solution 9 - Java

new FileOutputStream(f) will create a file in most cases, but unfortunately you will get a FileNotFoundException

> if the file exists but is a directory rather than a regular file, does not exist but cannot be created, or cannot be opened for any other reason

from Javadoc

I other word there might be plenty of cases where you would get FileNotFoundException meaning "Could not create your file", but you would not be able to find the reason of why the file creation failed.

A solution is to remove any call to the File API and use the Files API instead as it provides much better error handling. Typically replace any new FileOutputStream(f) with Files.newOutputStream(p).

In cases where you do need to use the File API (because you use an external interface using File for example), using Files.createFile(p) is a good way to make sure your file is created properly and if not you would know why it didn't work. Some people commented above that this is redundant. It is true, but you get better error handling which might be necessary in some cases.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionStefan DunnView Question on Stackoverflow
Solution 1 - JavatalnicolasView Answer on Stackoverflow
Solution 2 - JavaKostia MedvidView Answer on Stackoverflow
Solution 3 - JavaNikhil SahuView Answer on Stackoverflow
Solution 4 - JavaShashank KadneView Answer on Stackoverflow
Solution 5 - JavaPeter LawreyView Answer on Stackoverflow
Solution 6 - JavaJames GrahamView Answer on Stackoverflow
Solution 7 - JavaManish BansalView Answer on Stackoverflow
Solution 8 - JavasikanderView Answer on Stackoverflow
Solution 9 - JavastackoverflowedView Answer on Stackoverflow