我正在尝试将hashset写入文本文件。通常,我对写入txt没有任何问题,因为它对我来说很简单。但是,在这种情况下,我绝对无能为力。
关于该类的一些背景知识:它是具有2个字段的ComputerScientist对象的哈希集;名称和研究领域(是的,我知道我用来填充哈希集的东西不计算在内,我只是试着测试一下,看看我是否能让它工作)。
我知道使用filewriter将字符串保存到hashset的基本设置,这就是我在SO上遇到的许多类似问题,所以那些并没有真正帮助我。
我渴望学习,如果遗漏了讽刺或侮辱性的评论,我将不胜感激。如果已经有一个类似的问题涉及将对象的hashset写入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 :(得分: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 :(得分:0)
根据您的评论here,您的输出目前会显示许多条目:ComputerScientist @ 7e384e79
我强烈建议您更新此问题,而不是依赖该链接,并举例说明您的代码目前输出的内容。
当你看到像ComputerScientist @ 7e384e79这样的输出时,这意味着ComputerScientist类并没有覆盖toString()方法来显示它的状态。你可以这样做,让你的技术工作。你可以手工完成或者使用提供重构的IDE来减少它的繁琐,但是你不能免费获得它。你需要为你希望以这种方式输出的每个课程实现它。
答案 2 :(得分: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.");
}
}