Java:创建文件或目录(如果不存在)
我的类获取一个包含路径(dir1/dir2/abc.txt)或文件(def.txt)的字符串,我希望写入/读取该文件。如果文件不存在,我想创建目录(如果有)和文件 到目前为止,我的类构造函数(“pfad”是一个实例变量):Java:创建文件或目录(如果不存在),java,file,exception-handling,io,nullpointerexception,Java,File,Exception Handling,Io,Nullpointerexception,我的类获取一个包含路径(dir1/dir2/abc.txt)或文件(def.txt)的字符串,我希望写入/读取该文件。如果文件不存在,我想创建目录(如果有)和文件 到目前为止,我的类构造函数(“pfad”是一个实例变量): public SerializedFahrzeugDAO(字符串路径){ pfad=路径; 试一试{ FileInputStream filein=新的FileInputStream(pfad); ObjectInputStream in=新的ObjectInputStrea
public SerializedFahrzeugDAO(字符串路径){
pfad=路径;
试一试{
FileInputStream filein=新的FileInputStream(pfad);
ObjectInputStream in=新的ObjectInputStream(filein);
List liste=(List)在.readObject()中;
in.close();
FileOutputStream fileout=新的FileOutputStream(pfad);
ObjectOutputStream out=新的ObjectOutputStream(fileout);
out.writeObject(liste);
out.close();
}
捕获(例外f){
if(f instanceof FileNotFoundException){
试一试{
文件ziel=新文件(pfad);
File dir=新文件(ziel.getParentFile().getAbsolutePath());
dir.mkdirs();
FileOutputStream fileout=新的FileOutputStream(pfad);
ObjectOutputStream out=新的ObjectOutputStream(fileout);
List newlist=newarraylist();
out.writeObject(newlist);
out.close();
}
catch(异常y){System.out.println(y);}
}
else{System.out.println(f);}
它适用于“dir/file.txt”等路径,但如果我只输入一个文件名,我会得到一个
NullPointerException
,而没有堆栈跟踪,我假设,异常发生在这里:
File dir= new File(ziel.getParentFile().getAbsolutePath());
ziel
没有父对象,因此ziel.getParentFile()
为null
您可以首先转换为绝对路径,然后获取父路径
编辑(1): 您应该改进错误处理
catch(Exception y){System.out.println(y); }
不打印stacktrace。应改用y.printStackTrace()
(或适当的日志框架)
编辑(2):
与其捕获
FileNotFoundException
,不如使用java.io.file
的方法检查文件是否存在,而不使用堆栈跟踪,我假设异常发生在这里:
File dir= new File(ziel.getParentFile().getAbsolutePath());
ziel
没有父对象,因此ziel.getParentFile()
为null
您可以首先转换为绝对路径,然后获取父路径
编辑(1): 您应该改进错误处理
catch(Exception y){System.out.println(y); }
不打印stacktrace。应改用y.printStackTrace()
(或适当的日志框架)
编辑(2):
与其捕获
FileNotFoundException
,不如使用java.io.file
的方法检查文件是否存在。仔细查看堆栈跟踪。引发的异常在哪里?发布整个堆栈跟踪,以便我们可以提供帮助。仔细查看堆栈跟踪。引发的异常在哪里?发布整个堆栈跟踪,以便我们可以一个可能的帮助。谢谢你的回答,我会马上检查。很抱歉缺少Stacktrace,大约一周前我不得不开始为一个大学项目学习Java,所以我基本上不知道我在做什么。谢谢你,你是对的。当你不加思考地使用stackoverflow中的代码时就会发生这种情况。谢谢你的回答,w我马上检查一下。很抱歉Stacktrace丢失了,大约一周前我不得不开始为一个大学项目学习Java,所以我基本上不知道我在做什么。谢谢你,你是对的。当你不用思考就直接使用stackoverflow的代码时,就会发生这种情况。。