关于导出歌单的问题
老师我这样写可以吗?有没有需要改进的地方,还有就是为什么for(int i=0;i<list.size();i++)
{
Song song = (Song)ois.readObject();
System.out.println(song);
}
能够读取到所有的歌曲类信息呢?
case 8:
System.out.println("请输入要导出的播放列表名称:");
String strPlayListName6=sc.next();
PlayList pl6=plc.searchPlayListByName(strPlayListName6);
if(pl6==null)
{
System.out.println("该播放列表不存在!");
break;
}else {
try {
FileOutputStream fos = new FileOutputStream(strPlayListName6+".txt");
ObjectOutputStream oos=new ObjectOutputStream(fos);
FileInputStream fis=new FileInputStream(strPlayListName6+".txt");
ObjectInputStream ois=new ObjectInputStream(fis);
List<Song> list=pl6.getMusicList();
for(int i=0;i<list.size();i++)
{
oos.writeObject(list.get(i));
oos.flush();
}
try {
for(int i=0;i<list.size();i++)
{
Song song = (Song)ois.readObject();
System.out.println(song);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
fos.close();
oos.close();
fis.close();
ois.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
break;
正在回答
同学你好,1、这里因为没有同学的全部代码,所以并不方便运行,但是检查同学贴出的代码并没有问题,只是有如下的一些小建议:
注意流的关闭顺序,要先关闭外层中的流,然后关闭内层中的流,例如:

2、还有一个优化小建议:在存入时,是将每一个Song类型的对象,存入了文件中,那这里可否将这些歌曲存入一个集合中,再将这个集合存入文件中呐,这样读取时,只需要读取一次,一个对象就可以了哦!
3、for(int i=0;i<list.size();i++)这是一个根据歌曲的集合长度,来决定遍历次数哦,readObject()方法是调用一次返回一个对象,再调用readObject()一次返回第二个对象,自动在每个对象后面做标记!所以当歌曲集合遍历完成,所有文件中的歌曲对象也就输出完成了哦!
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星