Как записать объект Map в файл - PullRequest
0 голосов
/ 10 октября 2018

Я хочу записать в файл из Map объекта.Вот моя попытка.

try {
    stuMap.put(student.getId(), student);
    Path file = Paths.get("student.txt");  // to create the file 
    Files.write(file, stuMap, Charset.forName("UTF-8"));  // try to save in the file 
    /*  fileReaderWriter.createFileIn_NIO(stuMap);*/
    try {
        fileReaderWriter.createFileIn_NIO(stuMap);
    } catch (IOException ex) {
        System.out.println("file not saved");
    }
    return true;
} catch (Exception ex) {
    System.out.println("not stored in Map");
    return false;
}

Как мне сделать эту работу?

Ответы [ 4 ]

0 голосов
/ 10 октября 2018

Просто используйте org.apache.commons.io.FileUtils

import org.apache.commons.io.FileUtils;

yourMap.forEach((key, value) -> {
    FileUtils.writeStringToFile(
            outputFile, key + ", " + value + "\n", true);
});
0 голосов
/ 10 октября 2018

В java есть концепция для сохранения состояния объекта и его последующего извлечения, называемая «Сериализация».
Для записи объекта

File fileToSaveObject=new File("path");
Object objectToSave=new Object();

FileOutputStream fileOut = new FileOutputStream(fileToSaveObject);
ObjectOutputStream out = new ObjectOutputStream(fileOut);

out.writeObject(objectToSave); // It will save 'objectToSave' in given file

out.close();
fileOut.close(); 

Для чтения объекта

File fileToReadObject=new File("path");
Object objectToRead;

FileInputStream fileIn = new FileInputStream(fileToReadObject);
ObjectInputStream in = new ObjectInputStream(fileIn);

objectToRead= (Object) in.readObject();  // It will return you the saved object

in.close();
fileIn.close();
0 голосов
/ 10 октября 2018

Простой вариант решения проблемы - использовать библиотеку Gson:

    String str = new Gson().toJson(yourMap);
    File file = new File(fileName);
    try(FileOutputStream stream = new FileOutputStream(file)) {
        file.createNewFile();
        stream.write(str.getBytes());
    }catch (IOException e){
        System.out.println("can't write to file");
    }
0 голосов
/ 10 октября 2018

Вы можете использовать такие инструменты, как Джексон , чтобы писать java-карты как json и читать их как map.Как уже упоминали другие, это только один из возможных способов.

Пример

@Test
public void loadMapFromFileAndSaveIt(){
    Map<Object, Object> map = loadMap("map.json");
    map.put("8", "8th");
    map.remove("7");
    save(map,"/path/to/map2.txt");
}

private Map<Object, Object> loadMap(String string) {
    ObjectMapper mapper = new ObjectMapper();
    try (InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("map.json")) {
        return mapper.readValue(in, HashMap.class);
    }catch (Exception e) {
        throw new RuntimeException(e);
    }
}

private void save(Map<Object, Object> map,String path) {
    try (PrintWriter out = new PrintWriter(path)) {
        out.println(toString(map));
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

public String toString(Object obj) {
    try (StringWriter w = new StringWriter();) {
        new ObjectMapper().configure(SerializationFeature.INDENT_OUTPUT, true).writeValue(w, obj);
        return w.toString();
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

Если файл map.json на вашем пути к классам содержит

{
 "1":"1th",
 "2":"2th",
 "3":"3th",
 "4":"4th",
 "5":"5th",
 "6":"6th",
 "7":"7th"
}

Приведенный выше код изменит его и запишетв файл /path/to/map2.txt, который будет содержать

{
  "1" : "1th",
  "2" : "2th",
  "3" : "3th",
  "4" : "4th",
  "5" : "5th",
  "6" : "6th",
  "8" : "8th"
}
...