Это мой метод, он создает новый объект «предмет». класс "AddNewObject" возвращает мне тип объекта (имя, описание).

AddNewPredmet addnewpredmet = new AddNewPredmet();
listPredmet.add(AddNewPredmet.AddPredmet());
StorageInFile.savePredmet(listPredmet);

Все работает. Но у меня проблема с записанным в файле результатом. В выходном файле есть символы, которые не читаются, как показано -
¬н sr java.util.ArrayListxЃТ™Зaќ I sizexp w sr entity.PredmetїБц)Зя| L Descriptiont Ljava/lang/String;L PNameq ~ xpt testt testx

Ниже приводится функция, которая записывает в файл

public class StorageInFile {
    static void savePredmet(List<Predmet> listPredmet) {
       FileOutputStream fos = null;
       ObjectOutputStream oos = null;
       try {
         fos = new FileOutputStream("Predmet.txt");
          oos = new ObjectOutputStream(fos);
          oos.writeObject(listPredmet);
          oos.flush();
          oos.close();
       } catch (FileNotFoundException ex) {
         Logger.getLogger(StorageInFile.class.getName())
           .log(Level.SEVERE, "Нет такого файла", ex);
       } catch (IOException ex) {
         Logger.getLogger(StorageInFile.class.getName())
           .log(Level.SEVERE, "Не могу записать", ex);
      }
   }}

Как я могу это исправить? Я думаю о методе toString (), но не могу добавить этот метод в этот код.

-2
ERRMOFF 16 Окт 2019 в 22:49
1
Что вы хотите сделать с файлом? Что вы ожидали от него?
 – 
Ivar
16 Окт 2019 в 22:55
Какое именно содержание вы ожидаете в файле "Predmet.txt"? И почему вы ожидаете, что контент будет отформатирован таким образом? И почему вас волнует контент, что вы хотите с ним делать?
 – 
Progman
16 Окт 2019 в 22:56
Вы написали объект, используя сериализацию по умолчанию в файл. Эта сериализация не только текстовая, но может содержать двоичные данные, а также метаданные, поскольку она предназначена для повторного считывания данных в объект.
 – 
cello
16 Окт 2019 в 22:57
Содержание в файле будет «Строковое имя, Строковое описание». Насчет второго вопроса, idk, потому что я все это делаю по шаблону моего учителя.
 – 
ERRMOFF
16 Окт 2019 в 22:59
1
 – 
Progman
16 Окт 2019 в 22:59

2 ответа

Попробуйте использовать буферизованный модуль записи и программу просмотра с поддержкой UTF-8, чтобы просмотреть файл. Вы пытаетесь использовать инструмент, который предполагает однобайтовую кодировку, например кодировки Windows-125x. Блокнот - пример такого инструмента. Так что, используя способную программу просмотра, вы можете смотреть на нее.

Также это поможет показать, что находится в вашем файле.

2
v x v 16 Окт 2019 в 22:57

Если вы ожидали распечатать содержимое каждого экземпляра Predmet в списке <>, вы можете попробовать следующее.

  • Реализовать метод toString () в классе Predmet
  • Попробуйте записать в файл следующий фрагмент.

    FileWriter writer = new FileWriter("sample.txt");
    try {
      int size = listPredMet.size();
      for (int index =0; index < size; index++){
          writer.write(listPredMet.get(index).toString());
          writer.flush();
      }
    }catch(Exception e){
      e.printStackTrace();
    }finally{
      writer.close()
    }
    
0
dexter2305 16 Окт 2019 в 23:10