尝试打开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();
}
}
我尝试手动创建文件并将其与类放在同一个包中,但它没有帮助。发生什么事了?!
谢谢!
答案 0 :(得分:0)
您提供文件的相对路径。这意味着程序将查找相对于工作目录的文件。
根据您运行程序的方式,它将是您运行它的目录(如果从Shell / Cmd运行)或项目设置中配置的任何内容(如果从IDE运行)。对于后者,它取决于IDE,但通常是项目根目录。
有关工作目录的更多信息:https://en.wikipedia.org/wiki/Working_directory
有关相对路径的更多信息:https://en.wikipedia.org/wiki/Path_(computing)#Absolute_and_relative_paths
关于文件的创建,如果要写入文件,它将创建不存在的文件。当你阅读它时,它期望它存在。这意味着您必须在阅读之前创建空文件(如果不存在)或将异常视为空内容。
答案 1 :(得分:0)