Записать хешсет в txt используя filewriter

1

Я пытаюсь записать hashset в текстовый файл. Обычно у меня нет проблем с написанием в txt, поскольку это просто для меня. Однако в этом случае я абсолютно не знаю.

Немного фона о классе: это хэшсет объектов ComputerScientist с двумя полями; имя и область исследований (и да, я знаю, что я поставил, чтобы заполнить хэшсет, не считается, я только пытался проверить, могу ли я заставить это работать).

Я знаю, что базовая настройка для использования файлового редактора для сохранения строк в hashset, и это то, что многие из похожих вопросов, которые я нашел на SO, касались, поэтому мне это не помогло.

Я очень хочу учиться, и я был бы признателен, если бы были упущены или оскорбительные комментарии. И если есть уже аналогичный вопрос, который касается записи хэш-объектов объектов в txt файл, я прошу прощения за то, что не видел его.

import java.util.HashSet;
import java.io.FileWriter;
import java.io.IOException;
/**
* Write a description of class ComputerScientistSet here.
* 
* @author (your name) 
* @version (a version number or a date)
*/
public class ComputerScientistSet
{
private HashSet<ComputerScientist> computerScientistSet;
private FileWriter computerScientistWriter;
private String fileName;
/**
 * Constructor for objects of class ComputerScientistSet
 */
public ComputerScientistSet(){
    computerScientistSet = new HashSet<ComputerScientist>();
    fileName = "scientist-names.txt";
    setComputerScientistSet();
}

private void setComputerScientistSet(){
    computerScientistSet.add (new ComputerScientist("Bob", "Robotics"));
    computerScientistSet.add (new ComputerScientist("Tim", "VR"));
    computerScientistSet.add (new ComputerScientist("Jake", "Nuclear Fision"));
    computerScientistSet.add (new ComputerScientist("Joe", "Snapple"));
    computerScientistSet.add (new ComputerScientist("Jane", "Magnets"));
    computerScientistSet.add (new ComputerScientist("Mary", "PC"));
}

public void writeNames(){
    try{
        computerScientistWriter = new FileWriter(fileName, true);
        computerScientistWriter.write(computerScientistSet);
        computerScientistWriter.close();
    }
    catch(IOException ioException){
        System.out.println("Error.");
    }
}
}

Обновление: поможет ли я включить следующий код? Я все еще разрабатываю, что будет в круглых скобках по строке.write(). Мой мозг жарится:/

for (int i = 0; i < computerScientistSet.size(); i++) {
            computerScientistWriter.write();
        }
  • 0
    Я никогда раньше не использовал FileWriter но, похоже, у него нет метода write который принимает HashSet . Вы можете попробовать computerScientistWriter.write(computerScientistSet.toString()); но я не знаю, HashSet форму вы хотите сохранить HashSet .
  • 0
    Когда вы спрашиваете, в какой форме я хочу сохранить его, вы имеете в виду тип выходного файла?
Показать ещё 1 комментарий
Теги:
hashset
bluej

3 ответа

1

Поскольку я предполагаю, что вы хотите записать набор в файл, чтобы прочитать его позже, лучшим способом было бы не изобретать колесо и вместо этого использовать сериализацию.

public class Person implements java.io.Serializable {
    private String name;
    // constructor, setter, getter, etc
}

public static void main(String[] args) {
    Set<Person> persons = new HashSet<Person>();
    persons.add(new Person("foo");
    try {
        FileOutputStream fileOut = new FileOutputStream("/tmp/persons.data");
        ObjectOutputStream out = new ObjectOutputStream(fileOut);
        out.writeObject(e);
        out.close();
        fileOut.close();
     } catch(IOException e) {
         e.printStackTrace();
     }
     try {
         FileInputStream fileIn = new  FileInputStream("/tmp/persons.data");
         ObjectInputStream in = new ObjectInputStream(fileIn);
         Set<Person> persons = (Set<Person>) in.readObject();
         in.close();
         fileIn.close();
     } catch(Exception e) {
         e.printStackTrace();
     }
}
  • 1
    Второе close() избыточно в каждом случае. Первый close() закрывает вложенный поток.
0

Закончилось использование этого кодирования:

public void writeNames(){
 try{
        computerScientistWriter = new FileWriter(fileName, true);                       
        for(ComputerScientist list: computerScientistSet){
               computerScientistWriter.write(list.getName() + " , " + "\n" + list.getField() + System.lineSeparator() );
        }
        computerScientistWriter.close();
    }
    catch(IOException ioException){
        System.out.println("Error.");
    }
}
  • 0
    Очень плохой выбор имени переменной. ComputerScientist не list. Set здесь list . item или действительно computerScientist ученый был бы лучшим выбором.
  • 0
    Спасибо за указание на это. Нужно изменить многие имена переменных, которые у меня есть, а также список «ученых-компьютерщиков» и их «полей». То, что у меня сейчас есть, это просто черновик по большей части, чтобы я мог понять, как все делать.
Показать ещё 1 комментарий
0

Основываясь на ваших комментариях, здесь ваш вывод в настоящее время показывает много записей: ComputerScientist @7e384e79

Вместо того, чтобы полагаться на эту ссылку, я настоятельно рекомендую вам обновить этот вопрос на примере того, как будет выглядеть ваш код здесь.

Когда вы видите вывод, например ComputerScientist @7e384e79, это означает, что класс ComputerScientist не переопределяет метод toString(), чтобы показать его состояние. Вы можете сделать это, чтобы ваша техника работала. Вы можете сделать это вручную или использовать среду IDE, которая предлагает рефакторинг, чтобы сделать его менее утомительным, но вы не получите его бесплатно. Это понадобится вам для каждого класса, который вы хотите вывести таким образом.

Изображение 174551

Изображение 174551

  • 0
    Какую IDE вы бы предложили?
  • 0
    Я использую Eclipse и InteliJ, но есть много других. Затмение - то, от чего эти скриншоты. В любом случае, рекомендации по программному обеспечению являются чем-то вроде superuser.com.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню