2016-09-12 3 views
0

Это мой класс Word и HashMap показанный объект. Я хочу сохранить его в текстовом файле на Java. Пожалуйста, направляй меня.Как сохранить HashMap в текстовом файле?

public class Word 
{ 
    private String path; 
    private transient int frequency; 
    private List<Integer> lindex=new ArrayList<Integer>(); 
} 
HashMap<String,List<Word>> hashMap = new HashMap<>(); 
+0

Добавить в 'метод toString', который преобразует карту в какой-то читаемый формат. Вы можете использовать JSON для этого. –

+1

Сохраните это как? ;) У вас должно быть представление данных карты. Вы можете сохранить, например, как json, xml, csv ... Выберите формат, который вы хотите сохранить первым, а затем сохраните его;) – Fincio

ответ

-1

Если вы просто выводит текст, а не какой-либо двоичных данных:

PrintWriter out = new PrintWriter("filename.txt"); 

Написать строку в нем, так же, как вы бы в любой выходной поток:

out.println(hashMap.toString()); 
+0

Это будет записывать данные HashMap, но как его следует читать? Помните, что сами ключи и значения могут содержать '=', '[', ']' и ','. – VGR

0

Вы можете использовать Jackson XML для выполнения этой задачи.

import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.core.JsonParseException; 
import com.fasterxml.jackson.databind.ObjectMapper; 

import java.io.File; 
import java.io.IOException; 
import java.io.Serializable; 
import java.util.*; 

public class Main { 
    private static class Word implements Serializable { 
     public void setPath(String s) { 
      this.path = s; 
     } 
     @JsonProperty 
     private String path; 
     @JsonProperty 
     private transient int frequency; 
     @JsonProperty 
     private List<Integer> lindex = new ArrayList<Integer>(); 
    } 

    public static void main(String[] args) throws JsonParseException, IOException { 
     HashMap<String, List<Word>> hashMap = new HashMap<>(); 
     ArrayList a = new ArrayList<Word>(); 
     Word w1 = new Word(); 
     Word w2 = new Word(); 
     Word w3 = new Word(); 
     w1.setPath("dev"); 
     w2.setPath("media"); 
     w3.setPath("etc"); 
     a.add(w1); 
     a.add(w2); 
     a.add(w3); 
     hashMap.put("key1", a); 
     ObjectMapper mapper = new ObjectMapper(); 
     mapper.writeValue(new File("data.json"), hashMap); 
    } 
} 

Выходной файл data.json

{"key1":[{"path":"dev","lindex":[]},{"path":"media","lindex":[]},{"path":"etc","lindex":[]}]} 
0

Это может быть простым в использовании XMLEncoder и XMLDecoder, которые выполняют боба сериализации:

static void write(Map<?, ?> map, 
        Path path) 
throws IOException { 
    try (XMLEncoder encoder = new XMLEncoder(
     new BufferedOutputStream(
      Files.newOutputStream(path)))) { 

     final Exception[] exception = { null }; 
     encoder.setExceptionListener(e -> exception[0] = e); 
     encoder.writeObject(map); 

     if (exception[0] != null) { 
      throw new IOException(exception[0]); 
     } 
    } 
} 

static Map<?, ?> read(Path path) 
throws IOException { 
    try (XMLDecoder decoder = new XMLDecoder(
     new BufferedInputStream(
      Files.newInputStream(path)))) { 

     final Exception[] exception = { null }; 
     decoder.setExceptionListener(e -> exception[0] = e); 
     Map<?, ?> map = (Map<?, ?>) decoder.readObject(); 

     if (exception[0] != null) { 
      throw new IOException(exception[0]); 
     } 

     return map; 
    } 
} 
Смежные вопросы