【问题标题】:Java: Creating File or Directory if not existentJava:如果不存在则创建文件或目录
【发布时间】:2017-02-19 21:34:04
【问题描述】:

我的班级得到一个包含路径 (dir1/dir2/abc.txt) 或文件 (def.txt) 的字符串,我想写入/读取该文件。如果文件不存在,我想创建目录(如果有的话)和文件。

到目前为止我的类构造函数(“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

【问题讨论】:

  • 仔细查看堆栈跟踪。异常在哪里抛出?发布整个堆栈跟踪,以便我们可以提供帮助。

标签: java file exception-handling io nullpointerexception


【解决方案1】:

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

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

ziel 没有父级,所以ziel.getParentFile()null

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


编辑(1):

你应该改进你的错误处理。

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

不打印堆栈跟踪。您应该改用y.printStackTrace()(或适当的日志框架)。


编辑(2):

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

【讨论】:

  • 感谢您的回答,将立即检查。很抱歉缺少 Stacktrace,大约一周前我不得不开始为大学项目学习 Java,所以我基本上不知道自己在做什么。
  • 谢谢,你是对的。当您不加思索地使用来自stackoverflow的代码时,就会发生类似的事情......
猜你喜欢
  • 1970-01-01
  • 2014-03-09
  • 2017-01-01
  • 1970-01-01
  • 2015-05-10
  • 2018-08-01
  • 2012-03-26
  • 2016-02-02
相关资源
最近更新 更多