创建FileInputStream时出现java.io.FileNotFoundException

尝试打开FileInputStream以从.ser扩展名的文件加载Map时出错。

构造函数,我在其中创建新的File并调用从文件加载映射的方法:

protected DriveatorImpl() { accounts = new ConcurrentHashMap(); 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) in.readObject(); in.close(); fileIn.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } 

我试图手动创建文件并将其与类相同的包中,但它没有帮助。 这是怎么回事?!

谢谢!

您提供文件的相对路径。 这意味着程序将查找相​​对于工作目录的文件。

根据您运行程序的方式,它将是您运行它的目录(如果从Shell / Cmd运行)或项目设置中配置的任何内容(如果从IDE运行)。 对于后者,它取决于IDE,但通常是项目根目录。

有关工作目录的更多信息: https : //en.wikipedia.org/wiki/Working_directory
有关相对路径的更多信息: https : //en.wikipedia.org/wiki/Path_ (computing)#Absolute_and_relative_paths

关于文件的创建,如果要写入文件,它将创建不存在的文件。 当你阅读它时,它期望它存在。 这意味着您必须在阅读之前创建空文件(如果不存在)或将exception视为空内容

  • 您给出的文件的路径可能是错误的IDE它可以采取相对路径,但从命令行,它将采取绝对路径 。