导出歌单异常了
package com.imcc.song; import java.util.Objects; // 歌曲类 public class Song { private String id; //歌曲ID private String name; //歌曲名 private String singer; //演唱者 public Song() { } public Song(String id, String name, String singer) { this.setId(id); this.setName(name); this.setSinger(singer); } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSinger() { return singer; } public void setSinger(String singer) { this.singer = singer; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Song)) return false; Song song = (Song) o; return Objects.equals(id, song.id) && Objects.equals(name, song.name) && Objects.equals(singer, song.singer); } @Override public int hashCode() { return Objects.hash(id, name, singer); } @Override public String toString() { return "歌曲信息:" + "歌曲ID:'" + id + '\'' + ", 歌曲名:'" + name + '\'' + ", 演唱者:'" + singer + '\'' + '}'; } } package com.imcc.song; import java.io.*; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Scanner; // 播放列表类 public class PlayList implements Serializable { private String playListName; //播放列表名称 private List<Song> musicList; //播放列表中的歌曲集合 public PlayList() { } public PlayList(String playListName, List<Song> musicList) { this.setPlayListName(playListName); this.setMusicList(musicList); } public String getPlayListName() { return playListName; } public void setPlayListName(String playListName) { this.playListName = playListName; } public List<Song> getMusicList() { if (this.musicList == null) { return musicList = new ArrayList<Song>(); } return musicList; } public void setMusicList(List<Song> musicList) { getMusicList(); this.musicList = musicList; } // //将歌曲添加播放列表 // public void addToPlayList(Song song) { // getMusicList().add(song); // } //显示播放列表中所有歌曲: public void displayAllSong() { List<Song> li = getMusicList(); for (Song s : li) { System.out.println(s.toString()); } } // //通过id查询歌曲: // public Song searchSongById(String id) { // // return null; // } // //通过名称查询歌曲: // public Song searchSongByName(String n) { // // return null; // } // //修改歌曲: // public void updateSong(String id, Song song) { // // } //从播放列表删除歌曲: public void deleteSong(String id) { List list = this.getMusicList(); for (int i = 0; i < list.size(); i++) { Song s = (Song) list.get(i); if (id.equals(s.getId())) { list.remove(i); this.setMusicList(list); break; } } } //导出歌单 : public void exportPlayList(PlayList playList) { try { String str = this.getPlayListName() + ".txt"; FileOutputStream fos = new FileOutputStream(new File(str)); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(playList); oos.flush(); fos.close(); oos.close(); } catch (IOException e) { e.printStackTrace(); } } } package com.imcc.song; import java.util.*; //播放器类 public class PlayListCollection { static private Map<String, PlayList> playListMap; //存放播放列表的集合 public PlayListCollection() { } public Map getPlayListMap() { if (playListMap == null) { playListMap = new HashMap<String, PlayList>(); playListMap.put("主播放列表", new PlayList()); return playListMap; } else { return playListMap; } } public static void setPlayListMap(Map<String, PlayList> playListMap) { PlayListCollection playListCollection = new PlayListCollection(); playListCollection.getPlayListMap(); } //添加播放列表: public void addPlayList(PlayList playList) { getPlayListMap().put(playList.getPlayListName(), playList); } //删除播放列表: public void deletePlayList(PlayList playList) { String str = playList.getPlayListName(); getPlayListMap().remove(str); } //通过名字查询: public PlayList searchPlayListByName(String playListName) { return (PlayList) getPlayListMap().get(playListName); } //显示所有播放列表名称: public void displayPlayListName() { Map<String, PlayList> map = getPlayListMap(); for (Map.Entry<String, PlayList> entry : map.entrySet()) { System.out.println("列表名称: " + entry.getKey()); } } } package com.imcc.song; import java.util.List; import java.util.Scanner; import java.util.*; public class TestDemo { static Scanner sc = new Scanner(System.in); int i1 = 0; int i2 = 0; static PlayListCollection playListCollection = new PlayListCollection(); // 输入数字判断 public int input() { while (true) { try { return Integer.valueOf(sc.next()); } catch (Exception e) { System.out.println("ERROR!"); System.out.println("请重新输入:"); } } } // 主菜单方法 public void menu() { System.out.println("******************"); System.out.println(" **主菜单**"); System.out.println(" 1--播放列表管理"); System.out.println(" 2--播放器管理"); System.out.println(" 0--退出"); System.out.println("******************"); System.out.println("请输入对应的数字进行操做:"); switch (input()) { case 1: playlist(); break; case 2: player(); break; case 0: System.out.println("退出成功,欢迎下次使用!"); System.exit(0); default: System.out.println("输入数字错误!"); menu(); break; } } // 播放列表管理 public void playlist() { System.out.println("******************"); System.out.println(" **播放列表管理**"); System.out.println(" 1--将歌曲添加到主播放列表"); System.out.println(" 2--将歌曲添加到普通播放列表"); System.out.println(" 3--通过歌曲id查询播放列表中的歌曲"); System.out.println(" 4--通过歌曲名称查询播放列表中的歌曲"); System.out.println(" 5--修改播放列表中的歌曲"); System.out.println(" 6--删除播放列表中的歌曲"); System.out.println(" 7--显示播放列表中的所有歌曲"); System.out.println(" 8--导出歌单"); System.out.println(" 9--返回上一级菜单"); System.out.println("******************"); System.out.println("请输入对应的数字进行管理:"); switch (input()) { case 1: //1--将歌曲添加到主播放列表 i1 = 1; testSong(); playlist(); break; case 2: //2--将歌曲添加到普通播放列表 i1 = 2; testSong(); playlist(); break; case 3: //3--通过歌曲id查询播放列表中的歌曲 i1 = 3; testSong(); playlist(); break; case 4: //4--通过歌曲名称查询播放列表中的歌曲 i1 = 4; testSong(); playlist(); break; case 5: //5--修改播放列表中的歌曲 i1 = 5; testSong(); playlist(); break; case 6: //6--删除播放列表中的歌曲 i1 = 6; testSong(); playlist(); break; case 7: //7--显示播放列表中的所有歌曲 i1 = 7; testSong(); playlist(); break; case 8: //8--导出歌单 i1 = 8; testSong(); playlist(); break; case 9: menu(); break; default: System.out.println("输入错误!"); playlist(); break; } } // 播放器列表管理 public void player() { System.out.println("******************"); System.out.println(" **播放器列表管理**"); System.out.println(" 1--向播放器添加播放列表"); System.out.println(" 2--从播放器删除播放列表"); System.out.println(" 3--通过名字查询播放列表信息"); System.out.println(" 4--显示所有播放列表名称"); System.out.println(" 9--返回上一级"); System.out.println("******************"); System.out.println("请输入对应的数字进行管理:"); switch (input()) { case 1: //1--向播放器添加播放列表 i2 = 1; testPlayList(); break; case 2: //2--从播放器删除播放列表 i2 = 2; testPlayList(); break; case 3: //3--通过名字查询播放列表信息 i2 = 3; testPlayList(); break; case 4: //4--显示所有播放列表名称 i2 = 4; testPlayList(); break; case 9: menu(); break; default: System.out.println("输入错误,请重新输入:"); player(); break; } } public static void main(String[] args) { TestDemo testDemo = new TestDemo(); testDemo.menu(); } //主播放列表判断id是否存在 public boolean isId(String id, String playlist) { //首先得到主播放列表对象 PlayList playList = (PlayList) playListCollection.getPlayListMap().get(playlist); //得到list boolean flas = false; // 存在为真,不存在为假 List<Song> list = playList.getMusicList(); for (Song s : list) { if (id.equals(s.getId())) { flas = true; break; } } return flas; } /** * 测试歌曲类 */ public void testSong() { //1--将歌曲添加到主播放列表 if (i1 == 1) { System.out.println("将歌曲添加到主播放列表"); System.out.println("请输入添加歌曲的数量:"); int x = input(); PlayList playList = null; for (int i = 1; i <= x; i++) { System.out.println("请输入第" + i + "首歌曲:"); System.out.println("请输入歌曲id:"); String id = sc.next(); //判断一下id是重复 boolean idIs = isId(id, "主播放列表"); //当idIs为true时,说明已经存在 if (idIs) { System.out.println("id重复"); //判断是否还有添加条数 if (i < x) { //说明不是最后一条添加重复,跳过本次循环 continue; } else { //没有下一条需要添加,返回目录 System.out.println("没有下一条信息需要添加!返回菜单!"); playlist(); break; } } else { // 进到这里说明不存在 System.out.println("该歌曲id在主播放列表不存在,继续输入其他信息!"); System.out.println("请输入歌曲名称:"); String name = sc.next(); System.out.println("请输入演唱者:"); String singer = sc.next(); Song song = new Song(id, name, singer); //将原来的list拿出来 playList = (PlayList) playListCollection.getPlayListMap().get("主播放列表"); playList.setPlayListName("主播放列表"); playList.getMusicList().add(song); playListCollection.getPlayListMap().put("主播放列表", playList); System.out.println("添加成功"); } } //显示播放列表所有信息 System.out.println("主播放列表:"); System.out.println("播放列表中的所有歌曲为:"); playList.displayAllSong(); } //2--将歌曲添加到普通播放列表 if (i1 == 2) { System.out.println("将歌曲添加到普通播放列表"); System.out.println("请输入要添加的播放列表名称:"); String str = sc.next(); //判断列表是否存在 if (playListCollection.getPlayListMap().containsKey(str)) { //列表存在 //判断是否为主列表 if ("主播放列表".equals(str)) { //输入为主播放列表 System.out.println("主播放列表请选1到主列表添加!"); playlist(); } else { //输入列表不是主列表,且判断后存在 System.out.println("请输入添加歌曲的数量:"); //开始添加 int x = input(); for (int i = 1; i <= x; i++) { System.out.println("请输入第" + i + "首歌曲:"); System.out.println("请输入歌曲id:"); String id = sc.next(); //判断id是否重复 PlayList playList = (PlayList) playListCollection.getPlayListMap().get(str); List<Song> list = playList.getMusicList(); //判断当前列表是否重复 if (!(isId(id, str))) { //前列表没有重复 //判断主列表是否有此id if (isId(id, "主播放列表")) { //有此id,进行添加 PlayList addPlayList = (PlayList) playListCollection.getPlayListMap().get("主播放列表"); List<Song> addList = addPlayList.getMusicList(); Song song = null; for (Song s : addList) { if (id.equals(s.getId())) { song = s; break; } } list.add(song); playListCollection.getPlayListMap().put(str, playList); System.out.println("id在主列表存在,添加到此列表成功!"); continue; } else { //无此id继续添加 System.out.println("该歌曲在主播放列表中不存在,请继续输入其他信息!"); System.out.println("请输入歌曲名称:"); String name = sc.next(); System.out.println("请输入演唱者:"); String singer = sc.next(); list.add(new Song(id, name, singer)); playList.setPlayListName(str); playListCollection.getPlayListMap().put(playList.getPlayListName(), playList); PlayList addPlayList = (PlayList) playListCollection.getPlayListMap().get("主播放列表"); List<Song> addList = addPlayList.getMusicList(); addList.add(new Song(id, name, singer)); playListCollection.getPlayListMap().put("主播放列表", addPlayList); } } else { //id在此列表中重复 System.out.println("此列表id重复"); continue; } } System.out.println("主播放列表:"); System.out.println("播放列表中的所有歌曲为:"); PlayList addPlayList = (PlayList) playListCollection.getPlayListMap().get("主播放列表"); addPlayList.displayAllSong(); System.out.println("普通播放列表:"); System.out.println("播放列表中的所有歌曲为:"); PlayList playList = (PlayList) playListCollection.getPlayListMap().get(str); playList.displayAllSong(); } } else { //列表不存在 System.out.println("输入有误,列表不存在!"); playlist(); } } //3--通过歌曲id查询播放列表中的歌曲 if (i1 == 3) { System.out.println("通过id查询播放列表中的歌曲"); System.out.println("请输入要查询播放列表名称:"); String str = sc.next(); //判断是否有此播放列表 if (playListCollection.getPlayListMap().containsKey(str)) { //列表存在 System.out.println("请输入要查询歌曲的id:"); String id = sc.next(); //判断id在此列表是否存在 PlayList playList = (PlayList) playListCollection.getPlayListMap().get(str); List<Song> list = playList.getMusicList(); Song song = null; boolean flas = false; for (Song s : list) { if (id.equals(s.getId())) { //此id存在 flas = true; song = new Song(s.getId(), s.getName(), s.getSinger()); break; } } //得到boolean值判断id是否存在 if (flas) { //id存在 System.out.println("该歌曲的信息为:"); System.out.println(song.toString()); } else { System.out.println("该歌曲在" + str + "播放列表中不存在!"); playlist(); } } else { //列表不存在 System.out.println("播放列表并不存在!"); playlist(); } } //4--通过歌曲名称查询播放列表中的歌曲 if (i1 == 4) { System.out.println("通过歌曲名称查询播放列表中的歌曲"); System.out.println("请输入要查询播放列表名称:"); String str = sc.next(); if (playListCollection.getPlayListMap().containsKey(str)) { System.out.println("请输入要查询歌曲的名称:"); String name = sc.next(); PlayList playList = (PlayList) playListCollection.getPlayListMap().get(str); List<Song> list = playList.getMusicList(); boolean flas = false; Song song = null; for (Song s : list) { if (name.equals(s.getName())) { flas = true; song = new Song(s.getId(), s.getName(), s.getSinger()); break; } } if (flas) { System.out.println("该歌曲的信息为:"); System.out.println(song.toString()); } else { System.out.println("该歌曲在播放列表" + str + "中不存在!"); playlist(); } } else { //列表不存在 System.out.println("播放列表并不存在!"); playlist(); } } //5--修改播放列表中的歌曲 if (i1 == 5) { System.out.println("修改播放列表中的歌曲"); System.out.println("请输入要修改的歌曲id:"); String id = sc.next(); //判断歌曲id是否存在 //获得所有播放列表 int x = 0; String name = null; String singer = null; Map<String, PlayList> map = playListCollection.getPlayListMap(); for (Map.Entry<String, PlayList> entry : map.entrySet()) { //所有的value PlayList playList = entry.getValue(); List<Song> list = playList.getMusicList(); for (Song s : list) { if (id.equals(s.getId())) { if (x == 0) { x++; //开始修改 System.out.println("请输入修改后的歌曲名称:"); name = sc.next(); System.out.println("请输入修改后的演唱者:"); singer = sc.next(); int index = list.indexOf(s); list.set(index, new Song(id, name, singer)); break; } if (x == 1) { x++; int index = list.indexOf(s); list.set(index, new Song(id, name, singer)); System.out.println("修改成功!"); break; } } if (x == 2) { break; } } } if (x == 0) { System.out.println("此id在所有列表中未找到"); playlist(); } if (x == 1) { System.out.println("修改成功"); playlist(); } } //6--删除播放列表中的歌曲 if (i1 == 6) { System.out.println("删除播放列表中的歌曲"); System.out.println("请输入歌曲所在播放列表名称:"); String str = sc.next(); //判断有无此列表 if (playListCollection.getPlayListMap().containsKey(str)) { //有此列表 System.out.println("请输入要删除歌曲的id:"); String id = sc.next(); //判断id是否存在 if (isId(id, "主播放列表")) { //id存在 //判断是否为主播放列表 if ("主播放列表".equals(str)) { //为主列表,删除主列表的id及其他列表的id Map<String, PlayList> map = playListCollection.getPlayListMap(); int index = 0; for (Map.Entry<String, PlayList> entry : map.entrySet()) { //所有的value值 PlayList playList = entry.getValue(); List<Song> list = playList.getMusicList(); //之前判断主列表存在此id //判断其他列表是否存在此id if (isId(id, entry.getKey())) { index++; playList.deleteSong(id); //id删除之后再次放入map集合中 playListCollection.getPlayListMap().put(entry.getKey(), playList); } if (index == 2) { break; } } if (index == 2 || index == 1) { System.out.println("删除成功!"); playlist(); } } else { //为其他列表只删除一次 PlayList playList = (PlayList) playListCollection.getPlayListMap().get(str); playList.deleteSong(id); playListCollection.getPlayListMap().put(str, playList); System.out.println("删除成功!"); playlist(); } } else { //id不存在 System.out.println("输入id不存在!"); playlist(); } } else { //输入播放列表不存在 System.out.println("此播放列表不存在!"); playlist(); } } //7--显示播放列表中的所有歌曲 if (i1 == 7) { System.out.println("输入播放列表名称:"); String str = sc.next(); //判断播放列表是否存在 if (playListCollection.getPlayListMap().containsKey(str)) { //播放列表存在 //获取播放列表对应的对象 PlayList playList = (PlayList) playListCollection.getPlayListMap().get(str); playList.displayAllSong(); playlist(); } else { //播放列表不存在 System.out.println("播放列表不存在!"); playlist(); } } //8--导出歌单 if (i1 == 8) { System.out.println("导出歌单"); System.out.println("请输入要导出歌单的播放列表名称:"); String str = sc.next(); //判断类表是否存在 if (playListCollection.getPlayListMap().containsKey(str)) { PlayList playList = (PlayList) playListCollection.getPlayListMap().get(str); playList.exportPlayList(); System.out.println("导出歌单!"); } else { System.out.println("输入的列表歌单并不存在!"); playlist(); } } } /** * 测试播放器列表类 */ public void testPlayList() { //1--向播放器添加播放列表 if (i2 == 1) { System.out.println("向播放器添加列表"); System.out.println("输入添加的播放列表名称:"); String str = sc.next(); //判断有此播放列表 if (playListCollection.getPlayListMap().containsKey(str)) { //有此播放列表 System.out.println("此播放列表已经存在!"); player(); } else { //没有此播放列表,进行添加 PlayList playList = new PlayList(); playList.setPlayListName(str); playListCollection.addPlayList(playList); System.out.println("添加播放列表成功!"); player(); } } //2--从播放器删除播放列表 if (i2 == 2) { System.out.println("请输入要删除的播放列表:"); String str = sc.next(); //判断有没有此列表 if (playListCollection.getPlayListMap().containsKey(str)) { //有此列表,判断是否为主列表 if ("主播放列表".equals(str)) { //为主播放列表,不允许删除 System.out.println("主播放列表不允许删除!"); player(); } else { //不为主类表,可以删除 //获取value对象 PlayList playList = (PlayList) playListCollection.getPlayListMap().get(str); System.out.println(playList.getPlayListName()); playListCollection.deletePlayList(playList); System.out.println("删除成功! "); player(); } } else { //没有此列表 System.out.println("此播放列表不存在!"); player(); } } //3--通过名字查询播放列表信息 if (i2 == 3) { System.out.println("通过名字查询播放列表信息"); System.out.println("请输入要查询的播放列表名称:"); String str = sc.next(); //判断播放列表是否存在 if (playListCollection.getPlayListMap().containsKey(str)) { //播放列表存在 System.out.println("该播放列表存在!"); System.out.println("该播放列表名称为:" + str); System.out.println("播放列表中的所有歌曲为:"); PlayList playList = playListCollection.searchPlayListByName(str); //调用playlist里的查询方法 playList.displayAllSong(); player(); } else { //播放列表不存在 System.out.println("播放列表不存在!"); player(); } } //4--显示所有播放列表名称 if (i2 == 4) { playListCollection.displayPlayListName(); player(); } } /** * 测试播放器类 */ public void testPlayListCollection() { } }
正在回答 回答被采纳积分+1
要在Song类里面实现接口Serializeble,不是在PlayList中实现,
public class Song implements Serializable{
朋友,这是我在写这题的时候的代码,关于导出歌单的,写在PlayList类中的 或许能提供帮助
/**
* exprotPlsyList 导出歌单方法
*
* @param plc Map<String,PlayList>总列表
* @throw IOException io异常//FileNotFoundException 文件创建失败异常
*/
public void exprotPlsyList(Map<String, PlayList> plc) {
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("歌单列表.txt"));// 连接为对象输出流
Iterator<Entry<String,PlayList>> it=plc.entrySet().iterator();//将总表转换为Iterator
while(it.hasNext()) {//循环遍历总表
Entry<String,PlayList> en=it.next();
oos.writeBytes(en.getKey());//写入标题
if(!en.getValue().getMusicList().isEmpty()) {//判空
for(int i=0,n=en.getValue().getMusicList().size();i<n;i++) {//循环遍历每个歌单的歌曲
oos.writeObject(en.getValue().getMusicList().get(i));//写入每个歌曲的详细信息
}
} else {
oos.writeChars("歌单为空");// 当歌单为空时候写入为空提示
}
}
System.out.println("歌单列表导出完成");
oos.close();// 关闭流
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
在外部(测试类)里面
我用的switch
case 8:pl.exprotPlsyList(plc.getPlayListMap());break;
pl是Playlist实例化用作调用方法,plc是PlayListCollection的实例化,用来调用所有歌单合计的总表
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星