我的类获取一个包含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
。
答案 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
。