Java HashMap для файла и файл в HashMap выводит NULL - PullRequest
0 голосов
/ 27 июня 2018

Эй, ребята, я довольно новичок в разработке и на этом форуме и хотел создать зеркало для входа. Мне пришлось использовать BlueJ из-за моего учителя и, да, это, пожалуй, не самый лучший способ научиться писать, я думаю (версия, которую мы должны использовать в школе, даже не показывает ошибок перед компиляцией) (я лично начал писать с Eclipse ).

Моя проблема в том, что вывод, который я получаю из моего hasMapReader, просто равен нулю, после того как я «сохранил» HashMap в новом файле и «записал» его в другой HashMap.

HashMap<String, Serializable> userAcc = new HashMap<String, Serializable>();
userAcc.put(name, value);

otherClass.hashMapSaver(userAcc, hashMapFile = new java.io.File(location));



    public HashMap<String, Serializable> hashMapSaver(HashMap<String, Serializable> map, java.io.File file){
            try{   
    FileOutputStream f = new FileOutputStream(file);  
    ObjectOutputStream s = new ObjectOutputStream(f);          
    s.writeObject(map);

    s.close();
    f.close();

    }catch (IOException e) { 
       e.printStackTrace(); 
    }
    return map;
    }




   HashMap<String, Serializable> userAcc2 = new HashMap<String, Serializable>();
   otherClass.hashMapReader(userAcc2, new java.io.File(hashMapFile));

(userAcc2 находится в третьем "основном" классе) затем hashMapReader в другом классе:

 public HashMap<String, Serializable> hashMapReader(HashMap<String, Serializable> map2, java.io.File file){

    try{   
    FileInputStream f = new FileInputStream(file);  
    ObjectInputStream s = new ObjectInputStream(f);          
    map2 = (HashMap<String, Serializable>) s.readObject();
    f.close();
    s.close();


    }catch (IOException e) { 
       e.printStackTrace(); 
       return null;
    }  catch (ClassNotFoundException c) {
     c.printStackTrace();
     return null;
    }
    return map2;
}



System.out.println("userAcc2: " + userAcc2.get(name));
System.out.println("HashMap Keys: " + userAcc2.keySet());

но консоль просто распечатывает:

userAcc2: null; Ключи HashMap: []

Другая проблема, я думаю, заключается в том, что файл может заменяться каждый раз, когда я запускаю эту программу.

Я пытаюсь решить эту проблему почти неделю.

Спасибо :),

1 Ответ

0 голосов
/ 28 июня 2018

You map2 является аргументом в hashMapReader, но в рамках этого метода вы выполняете следующее присваивание:

map2 = (HashMap<String, Serializable>) s.readObject();

То, что обновляет переменную map2, но не объект, на который ссылается map2. Так как hashMapReader возвращает map2, следующее изменение решит вашу проблему:

userAcc2 = otherClass.hashMapReader(userAcc2, new java.io.File(hashMapFile));

В качестве примечания, аргумент map2 совершенно не нужен, так как вы все равно не используете объект, передаваемый. Что-то немного чище будет:

public HashMap<String, Serializable> hashMapReader(java.io.File file){
    HashMap<String, Serializable> map2 = null;
    try{   
        FileInputStream f = new FileInputStream(file);  
        ObjectInputStream s = new ObjectInputStream(f);          
        map2 = (HashMap<String, Serializable>) s.readObject();
        f.close();
        s.close();
    } catch (IOException e) { 
        e.printStackTrace(); 
        return null;
    } catch (ClassNotFoundException c) {
        c.printStackTrace();
        return null;
    }
    return map2;
}

...
userAcc2 = otherClass.hashMapReader(new java.io.File(hashMapFile));
...