Java:创建文件或目录(如果不存在)

时间:2016-10-11 10:49:57

标签: java file exception-handling io nullpointerexception

我的类获取一个包含Path(dir1 / dir2 / abc.txt)或文件(def.txt)的String,我想写/读入该文件。如果文件不存在,我想创建目录(如果有的话)和文件。

到目前为止我的类构造函数(“pfad”是一个实例变量):

public SerializedFahrzeugDAO(String path) {
    pfad=path;

    try{


        FileInputStream filein= new FileInputStream(pfad);
        ObjectInputStream in = new ObjectInputStream(filein);
        List<Fahrzeug> liste = (List<Fahrzeug>)in.readObject();
        in.close();
        FileOutputStream fileout = new FileOutputStream(pfad);
        ObjectOutputStream out = new ObjectOutputStream(fileout);

        out.writeObject(liste);
        out.close();

    }
    catch (Exception f){
        if(f instanceof FileNotFoundException){
            try{
                File ziel = new File(pfad);
                File dir= new File(ziel.getParentFile().getAbsolutePath());
                dir.mkdirs();
                FileOutputStream fileout = new FileOutputStream(pfad);
                ObjectOutputStream out = new ObjectOutputStream(fileout);
                List<Fahrzeug> newlist = new ArrayList<Fahrzeug>();
                out.writeObject(newlist);
                out.close();
            }
            catch(Exception y){System.out.println(y); }
        }

        else {System.out.println(f);}}

它适用于像“dir / file.txt”这样的路径,但如果我只输入文件名,我会得到NullPointerException

1 个答案:

答案 0 :(得分:0)

如果没有堆栈跟踪,我会假设,异常发生在这里:

            File dir= new File(ziel.getParentFile().getAbsolutePath());

ziel没有父母,因此ziel.getParentFile()null

您可以先转换为绝对路径然后获取父路径。

编辑(1):

您应该改进错误处理。

        catch(Exception y){System.out.println(y); }

不打印堆栈跟踪。您应该使用y.printStackTrace()代替(或正确的日志框架)。

编辑(2):

您应该使用FileNotFoundException的方法检查文件是否存在,而不是捕获java.io.File