Java FileOutputStream创建文件(如果不存在)


Answers:


302

FileNotFoundException如果文件不存在且无法创建(doc),它将抛出一个,但是如果可以创建一个文件。为了确保您可能应该先测试文件是否存在,然后再创建FileOutputStreamcreateNewFile()如果不存在,则创建带有):

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

2
如果该文件不存在,如何创建一个空的.txt文件?
Stefan Dunn

3
@StefanDunn createNewFile()方法,如我的示例所示。
talnicolas 2012年

55
条件是多余的。根据JavaDoc的说法,createNewFile()它本身会自动检查文件的存在。
阿兹特克2012年

8
@aztek也许我们可以留出条件来提高代码的可读性
Andrii Chernenko 2013年

2
createNewFile()在这里完全浪费时间。系统已经做到了。您只是强迫它看起来两次。
罗恩侯爵

61

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

yourFile.getParentFile().mkdirs()


23

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

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

如果要保留文件(如果存在)...

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

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


3
FileNotFoundException在两种情况下都会抛出异常。
mixel 2014年

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

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


2
这里有一个竞争条件...最好按以下步骤进行操作:File f = new File(“ Test.txt”); 如果(!f.createNewFile()){System.out.println(“文件已经存在”); }
人类

19

文件实用程序从Apache的百科全书是一个不错的方式一行来实现这一目标。

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

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


4

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

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

2

仅给出一种使用路径和文件创建文件的替代方法。

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


0

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

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

来自Javadoc

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.