【发布时间】:2013-04-13 06:03:57
【问题描述】:
我正在用 Java 编写一个程序,它显示了一系列课后俱乐部(例如足球、曲棍球 - 由用户输入)。俱乐部添加到以下ArrayList:
private ArrayList<Club> clubs = new ArrayList<Club>();
通过以下方法:
public void addClub(String clubName) {
Club club = findClub(clubName);
if (club == null)
clubs.add(new Club(clubName));
}
'Club' 是一个带有构造函数的类 - 名称:
public class Club {
private String name;
public Club(String name) {
this.name = name;
}
//There are more methods in my program but don't affect my query..
}
我的程序正在运行 - 它让我可以在我的数组列表中添加一个新的俱乐部对象,我可以查看数组列表,我可以删除我想要的任何内容等。
但是,我现在想将该 arrayList (clubs) 保存到一个文件中,然后我希望能够稍后加载该文件并且相同的 arraylist 再次存在。
对此我有两种方法(见下文),并且一直在努力让它工作,但没有任何运气,任何帮助或建议将不胜感激。
保存方法(文件名由用户选择)
public void save(String fileName) throws FileNotFoundException {
String tmp = clubs.toString();
PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
pw.write(tmp);
pw.close();
}
加载方法(当前代码不会运行 - 文件是字符串但需要是俱乐部?
public void load(String fileName) throws FileNotFoundException {
FileInputStream fileIn = new FileInputStream(fileName);
Scanner scan = new Scanner(fileIn);
String loadedClubs = scan.next();
clubs.add(loadedClubs);
}
我还使用 GUI 来运行应用程序,此时,我可以单击“保存”按钮,然后我可以输入名称和位置并保存它。该文件出现并可以在记事本中打开,但显示为 Club@c5d8jdj(对于我列表中的每个俱乐部)
【问题讨论】:
-
您看到的
Club@c5d8jdj是Object 类的toString()方法的结果。您希望如何将列表保存在文件中?什么格式? -
toString() 不适合写入文件。你想要序列化。
-
如果你想这样做,你必须重写 Club() 类的 toString() 方法,以便它包含所有信息,然后是一个构造函数,它能够重新创建目的。或者看看 Serializable 接口和 ObjectStreams:docs.oracle.com/javase/tutorial/essential/io/objectstreams.html
-
我没有偏好保存它的文件格式,只要它可以稍后在应用程序上加载..
标签: java arraylist text-files inputstream outputstream