的Java读取一个文件,如果它不存在,创建它

问题描述:

这里是我的代码的Java读取一个文件,如果它不存在,创建它

public String path; 
public String fileName; 
public static void readData() throws IOException{ 
    try { 
     path="myPath" 
     fileName="myFileName"; 
     fstream = new FileInputStream(path+fileName); 
     br = new BufferedReader(new InputStreamReader(fstream)); 
     //do something...// 
     } 
     br.close(); 
    } catch (FileNotFoundException ex) { 
     JOptionPane.showMessageDialog(null, "Reading file error"); 
     Logger.getLogger(LeggiDaFile.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

我想知道如何检查是否存在的fstream。如果它不存在,则必须创建一个新文件。我怎样才能做到这一点? 谢谢

这里是一个可能的解决方案:

public static void readData() throws IOException 
{ 
    File file = new File(path, filename); 

    if (!file.isFile() && !file.createNewFile()) 
    { 
     throw new IOException("Error creating new file: " + file.getAbsolutePath()); 
    } 

    BufferedReader r = new BufferedReader(new FileReader(file)); 

    try 
    { 
     // read data 
    }finally 
    { 
     r.close(); 
    } 
} 
+0

你可能也想看看使用'InputStreamReader',指定'Charset',而不是使用默认字符集的'FileReader' ... – Jesse 2011-03-28 20:28:22

+0

谢谢Jesse! 你解决了我的问题! – Franky 2011-03-28 21:06:48

要检查文件filename是否存在于path中,您可以使用new File(path, filename).exists()

如果指定的File的文件系统上存在文件或目录,则exists method返回true。要验证文件是文件而不是目录,可以使用isFile method

查看javadoc for java.io.File了解更多信息。

+0

甚至更​​好的新文件(路径,文件名).exists()会自动为您所在的操作系统插入正确的路径分隔符。 – Ceilingfish 2011-03-28 20:24:59

+0

好点 - 我编辑了我的答案。谢谢! – Greg 2011-03-28 20:27:07

您已经赶上了FileNotFoundException,这是您知道您想要阅读的文件不存在并且您可以创建它的地方。

if(new File("filename").exists()) 
    ... 

它应该做你想要什么。

缺少某些在你的代码 - 有没有对应的左括号右大括号。

但是,为了回答你的问题,首先要创建一个File对象,并使用exists(),然后createNewFile()如果exists()回报false。将File对象而不是文件名传递给构造函数FileInputStream

顺便说一句,它会花费你更少的时间来谷歌答案比它在这里输入你的问题。