java.io.FileNotFoundException при создании FileInputStream

Получение ошибки при попытке открыть FileInputStream для загрузки карты из файла .Ser extension.

Конструктор, в котором я создаю новый файл и вызываю метод, который загружает карту из файла:

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 ответа

  1. Укажите относительный путь к файлу. Это означает, что программа будет искать файл относительно рабочего каталога.

    В зависимости от того, как вы запускаете программу, это будет каталог, из которого вы ее запускаете (если запускаете из Shell/Cmd), или то, что настроено в параметрах проекта (если запускаете из IDE). Для последнего это зависит от IDE, но обычно это корневой каталог проекта.

    Больше информации на рабочем каталоге: https://en.wikipedia.org/wiki/Working_directory
    Подробнее об относительном пути: https://en.wikipedia.org/wiki/Path_ (вычисление)#Absolute_and_relative_paths

    Что касается создания файла, он будет создавать несуществующий файл, если вы будете писать в него. Когда вы читаете его, он ожидает, что он существует. Это означает, что вы должны создать пустой файл (если он не существует) перед чтением или просто рассматривать исключение как пустое содержимое .