创建FileInputStream时出现java.io.FileNotFoundException

时间:2017-01-13 06:17:52

标签: java io filenotfoundexception fileinputstream

尝试打开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();
    }
}

我尝试手动创建文件并将其与类放在同一个包中,但它没有帮助。发生什么事了?!

谢谢!

2 个答案:

答案 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)

  • 您提供的文件的路径可能是错误的,它可能需要relative path,但是从命令行开始,它将需要absolute path