【发布时间】:2017-01-13 06:17:52
【问题描述】:
尝试打开 FileInputStream 以从扩展名为 .ser 的文件加载 Map 时出错。
我创建新文件并调用从文件加载地图的方法的构造函数:
protected DriveatorImpl() {
accounts = new ConcurrentHashMap<String, Client>();
db = new File("database.ser"); // oddly this does not create a file if one does not exist
loadDB();
}
@SuppressWarnings("unchecked")
private void loadDB() {
try {
fileIn = new FileInputStream(db);
in = new ObjectInputStream(fileIn);
accounts = (Map<String, Client>) in.readObject();
in.close();
fileIn.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
我尝试手动创建文件并将其与类放在同一个包中,但它没有帮助。怎么回事?!
谢谢!
【问题讨论】:
-
// 奇怪的是,如果一个文件不存在,它不会创建一个文件 - 不是真的,你为什么认为它应该?
-
哦,我错过了 db.createNewFile();
-
这样做有什么意义?如果文件不存在,您宁愿知道这一点,也不愿因为它是空的而得到不同的异常。
-
在真实的开发场景中,你在说什么是有道理的。这是一个大学项目,我正在创建空文件,以防程序在其他机器上重新运行。感谢您的提示。
-
不回答问题。如果文件不存在,您宁愿知道这一点,而不是因为文件为空而遇到不同的问题。如果您需要创建它包含一些内容,请执行此操作。
File.createNewFile()不是万能的创可贴。
标签: java io filenotfoundexception fileinputstream