2017-01-12 7 views
-2

Я хочу написать и прочитать этот хэш-файл в и из txt-файла. Это то, что я пробовал:Сохранить и прочитать файл hashmap?

Основной класс:

SaveRead xd = new SaveRead(); 
    HashMap <String,Integer>users = new HashMap<String,Integer>(); 

// е вызывается при запуске

private Object e() throws ClassNotFoundException, FileNotFoundException, IOException { 
     return xd.readFile(); 
    } 

    public void onFinish() { 
      try { 
      xd.saveFile(users); 
     } catch (IOException e) { 
     } 
    } 

// SaveRead класс:

public class SaveRead implements Serializable{ 

    public void saveFile(HashMap<String, Integer> users) throws IOException{ 
    ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("/Users/Konto/Documents/scores.txt")); 
    outputStream.writeObject(users); 
} 

    public HashMap<String, Integer> readFile() throws ClassNotFoundException, FileNotFoundException, IOException{ 
     Object ii = new ObjectInputStream(new FileInputStream("/Users/Konto/Documents/scores.txt")).readObject(); 
     return (HashMap<String, Integer>) ii; 
    } 
} 

это, кажется ли ОК? Когда он пытается прочитать файл, я не получаю желаемого результата. Есть ли лучший способ обойти это?

+1

* «я не получаю желаемый результат» * Есть ли шанс получить более подробное описание проблемы? – Tom

+1

Возможный дубликат [Как читать и писать HashMap в файл?] (Https://stackoverflow.com/questions/3347504/how-to-read-and-write-a-hashmap-to-a-file) – Loren

ответ

2

Возможно, это связано с тем, что вы не закрываете свои потоки, поэтому содержимое не сбрасывается на диск. Вы можете очистить его с помощью try-with-resources statement (доступно на Java 7+). Вот компилируемый пример:

public class SaveRead implements Serializable 
{ 
    private static final String PATH = "/Users/Konto/Documents/scores.txt"; 

    public void saveFile(HashMap<String, Integer> users) 
      throws IOException 
    { 
     try (ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(PATH))) { 
      os.writeObject(users); 
     } 
    } 

    public HashMap<String, Integer> readFile() 
      throws ClassNotFoundException, IOException 
    { 
     try (ObjectInputStream is = new ObjectInputStream(new FileInputStream(PATH))) { 
      return (HashMap<String, Integer>) is.readObject(); 
     } 
    } 

    public static void main(String... args) 
      throws Exception 
    { 
     SaveRead xd = new SaveRead(); 

     // Populate and save our HashMap 
     HashMap<String, Integer> users = new HashMap<>(); 
     users.put("David Minesote", 11); 
     users.put("Sean Bright", 22); 
     users.put("Tom Overflow", 33); 

     xd.saveFile(users); 

     // Read our HashMap back into memory and print it out 
     HashMap<String, Integer> restored = xd.readFile(); 

     System.out.println(restored); 
    } 
} 

компиляция и запуск этого выводит следующее на моей машине:

 
{Tom Overflow=33, David Minesote=11, Sean Bright=22}