Сериализация карты Java в файл - PullRequest
1 голос
/ 22 ноября 2011

Я написал эту функцию, которая будет пытаться сохранить карту, но она не работает, я думаю? Я использую NetBeans и каждый раз, когда я захожу в каталог проекта в Java-SRC, я не могу найти созданный файл или в другом месте в проекте. Карта, безусловно, действительна, потому что выходные данные получаются идеальными, когда я не занимаюсь хранением. Кстати, я реализую seriliazable:)

Примечание: карта имеет тип TreeMap

 public boolean storeMap(TreeMap<DateTime, Integer> map){
   try{
     f_out = new FileOutputStream("mapObject.data");
     obj_out = new ObjectOutputStream (f_out);
     obj_out.writeObject(map);
     return true;
    }catch(IOException ioe){
        System.err.print(ioe);
        return false;
    }
}

есть ли причина, по которой выходной файл не генерируется? Спасибо

Ответы [ 3 ]

1 голос
/ 23 октября 2012

Сериализация HASHMAP: Этот код работает нормально, я реализовал и использовал в моем приложении. Плз сделать ваши функции соответственно для сохранения карты и извлечения карты.

Дело в том, что вам нужно подтвердить, что объекты, которые вы указываете в качестве значения в карте, должны быть сериализуемыми, то есть они должны реализовывать интерфейс serailizbele. ех. Map <.String, String> hashmap = new HashMap <.String, String> () .. здесь, в этой строке ... map и string оба являются неявно сериализуемыми, поэтому нам не нужно реализовывать сериализуемые для них явно, но если вы поставите ваш собственный объект, который должен быть сериализуемым.


public static void main(String arr[])
{
  Map<String,String> hashmap=new HashMap<String,String>();
 hashmap.put("key1","value1");
    hashmap.put("key2","value2");
    hashmap.put("key3","value3");
    hashmap.put("key4","value4");

     FileOutputStream fos;
    try {
        fos = new FileOutputStream("c://list.ser");

    ObjectOutputStream oos = new ObjectOutputStream(fos);
     oos.writeObject(hashmap);
     oos.close();

     FileInputStream fis = new FileInputStream("c://list.ser");
     ObjectInputStream ois = new ObjectInputStream(fis);
    Map<String,String> anotherList = (Map<String,String>) ois.readObject();

     ois.close();

     System.out.println(anotherList);

 } catch (FileNotFoundException e) {e.printStackTrace();
 } catch (IOException e) {e.printStackTrace();
    } catch (ClassNotFoundException e) {e.printStackTrace();
    }

}
1 голос
/ 22 ноября 2011

Я предлагаю использовать абсолютный путь, то есть что-то вроде

f_out = new FileOutputStream("/home/username/mapObject.data");

или в Windows

f_out = new FileOutputStream("c:\\work\\mapObject.data");

Если не было выброшено исключение (System.err.print(ioe); эта строка не печаталасьчто-нибудь), то файл был создан где-то.

0 голосов
/ 22 ноября 2011

Попытайтесь вызвать метод fulsh () для outputStreams.

    obj_out.flush();
    f_out.flush();

и закройте их в конечном итоге.

...