Я пытаюсь записать 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();
}
Поскольку я предполагаю, что вы хотите записать набор в файл, чтобы прочитать его позже, лучшим способом было бы не изобретать колесо и вместо этого использовать сериализацию.
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();
}
}
close()
избыточно в каждом случае. Первый close()
закрывает вложенный поток.
Закончилось использование этого кодирования:
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.");
}
}
ComputerScientist
не list.
Set
здесь list
. item
или действительно computerScientist
ученый был бы лучшим выбором.
Основываясь на ваших комментариях, здесь ваш вывод в настоящее время показывает много записей: ComputerScientist @7e384e79
Вместо того, чтобы полагаться на эту ссылку, я настоятельно рекомендую вам обновить этот вопрос на примере того, как будет выглядеть ваш код здесь.
Когда вы видите вывод, например ComputerScientist @7e384e79, это означает, что класс ComputerScientist не переопределяет метод toString(), чтобы показать его состояние. Вы можете сделать это, чтобы ваша техника работала. Вы можете сделать это вручную или использовать среду IDE, которая предлагает рефакторинг, чтобы сделать его менее утомительным, но вы не получите его бесплатно. Это понадобится вам для каждого класса, который вы хотите вывести таким образом.
FileWriter
но, похоже, у него нет методаwrite
который принимаетHashSet
. Вы можете попробоватьcomputerScientistWriter.write(computerScientistSet.toString());
но я не знаю,HashSet
форму вы хотите сохранитьHashSet
.