老师,为什么我导出歌单信息会有错误,而且two.txt也是乱码
package com.song.test; /** * 歌曲类 * @author Administrator * */ public class Song { private String ID;//歌曲ID private String name;//歌曲名 private String singer;//歌手名字 public Song(String ID,String name,String singer){ this.ID=ID; this.name=name; this.singer=singer; } public String getID() { return ID; } public void setID(String iD) { 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 int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((ID == null) ? 0 : ID.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((singer == null) ? 0 : singer.hashCode()); return result; } @Override public boolean equals(Object obj) { if(this==obj){ return true; } if(obj.getClass()==Song.class){ Song song=(Song)obj; return (song.getID().equals(ID))&&(song.getName().equals(name)) &&(song.getSinger().equals(singer)); } return false; } @Override public String toString() { return "歌曲信息:ID为" + ID + ", 歌名为" + name + ", 歌手为" + singer; } }
package com.song.test; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class PlayList implements Serializable{ private String playListName;//播放列表名称 private List<Song> musicList;//播放列表中歌曲集合 /** * 构造方法 * @param playListName 播放列表名称 */ public PlayList(String playListName){ this.playListName=playListName; musicList=new ArrayList<Song>(); } public String getPlayListName() { return playListName; } public void setPlayListName(String playListName) { this.playListName = playListName; } public List<Song> getMusicList() { return musicList; } public void setMusicList(List<Song> musicList) { this.musicList = musicList; } /** * 将歌曲添加到播放列表 * @param song 要添加的歌曲 */ public void addToPlayList(Song song){ boolean flag=false; for(Song song1:musicList){ if(song1.equals(song)){ flag=true;break; } } if(flag){ System.out.println("该歌曲已经存在于播放列表中,添加失败!"); }else{ musicList.add(song); } } //显示播放列表中所有歌曲 public void displayAllSong(){ System.out.println("播放列表中的所有歌曲为:"); for(Song song:musicList){ System.out.println(song); } } /** * 通过id查询歌曲 * @param id歌曲的id * @return查询到的歌曲信息 */ public Song searchSongById(String id){ Song song=null; for(Song song1:musicList){ if(song1.getID().equals(id)){ song=song1;break; } } return song; } /** * 根据歌曲的名称查询 * @param name歌曲的名称 * @return查询到的歌曲信息 */ public Song searchSongByName(String name){ Song song=null; for(Song song1:musicList){ if(song1.getName().equals(name)){ song=song1;break; } } return song; } /** * 修改播放列表中的歌曲信息 * @param id 要修改的歌曲id * @param song 新的歌曲信息 */ public void updateSong(String id,Song song){ Song song1=searchSongById(id); if(song1==null){ System.out.println("找不到对应id为"+id+"对应的歌曲信息!"); }else{ musicList.remove(song1); musicList.add(song); System.out.println("修改成功!"); } } /** * 删除播放列表中的指定歌曲信息 * @param id 要删除的歌曲id */ public void deleteSong(String id){ Song song2=searchSongById(id); if(song2==null){ System.out.println("找不到对应id为"+id+"对应的歌曲信息!"); }else{ musicList.remove(song2); System.out.println("删除成功!"); } } public void exportPlayList(){ try { FileOutputStream fio= new FileOutputStream(playListName+"two.txt"); ObjectOutputStream oos = new ObjectOutputStream(fio); List<Song> songList=getMusicList(); for(Song song:songList){ oos.writeObject(song); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package com.song.test; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * 播放列表集合 * @author Administrator * */ public class PlayListCollection { Map<String,PlayList> playListMap; public PlayListCollection(){ playListMap=new HashMap<String,PlayList>(); } /** * 向播放列表集合(播放器)添加播放列表 * @param playList 要添加的播放列表 */ public void addPlayList(PlayList playList){ //播放列表名称作为key值 playListMap.put(playList.getPlayListName(), playList); } /** * 删除播放列表 * @param playList 要删除的播放列表对象 */ public void deletePlayList(PlayList playList){ playListMap.remove(playList.getPlayListName()); System.out.println("删除成功!"); } /** * 通过播放列表名称查询播放列表 * @param playListName 播放列表名称 * @return 播放列表 */ public PlayList searchPlayListByName(String playListName){ PlayList playList=null; Set<String> playListSet=playListMap.keySet(); for(String s:playListSet){ if(s.equals(playListName)){ playList=playListMap.get(s);break; } } return playList; } /** * 显示所有播放列表的名称 */ public void displayListName(){ Set<String> playListSet=playListMap.keySet(); System.out.println("播放列表名称为:"); for(String s:playListSet){ System.out.println(s); } } public Map<String, PlayList> getPlayListMap() { return playListMap; } public void setPlayListMap(Map<String, PlayList> playListMap) { this.playListMap = playListMap; } }
package com.song.test; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.Scanner; public class Test { // 主菜单 public void mainMenu() { System.out.println("***********************"); System.out.println("***主菜单*** "); System.out.println("1--主播放列表管理 "); System.out.println("2--播放器管理 "); System.out.println("0--退出 "); System.out.println("***********************"); } // 播放列表管理菜单 public void playListMenu() { 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("**************************************"); } // 播放器管理 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("**************************************"); } // 主流程 public void test() { Test test = new Test(); Scanner sc = new Scanner(System.in); int input = 0, input1 = 1, input2 = 2; // 创建一个播放器 PlayListCollection plc = new PlayListCollection(); // 创建主播放列表 PlayList mainPlayList = new PlayList("创建主播放列表"); // 将主播放列表添加到播放器 plc.addPlayList(mainPlayList); PlayList favouritePlayList = null; while (true) { test.mainMenu(); System.out.println("请输入相应的数字进行操作:"); input = sc.nextInt(); if (input == 0) { break; } switch (input) { case 1: // 播放列表管理 while (true) { test.playListMenu(); System.out.println("请输入对应的数字对播放列表进行管理:"); input1 = sc.nextInt(); if (input1 == 9) break; switch (input1) { case 1: System.out.println("将歌曲添加 到主播放列表"); System.out.println("请输入要添加的歌曲数量:"); int count = sc.nextInt(); for (int i = 1; i <= count; i++) { System.out.println("请输入第" + i + "首歌曲:"); System.out.println("请输入歌曲的id:"); String strId = sc.next(); System.out.println("请输入歌曲的名称:"); String strName = sc.next(); System.out.println("请输入演唱者:"); String strSinger = sc.next(); // 创建歌曲类的对象 Song song = new Song(strId, strName, strSinger); mainPlayList.addToPlayList(song); // mainPlayList.displayAllSong(); } break; case 2: System.out.println("将歌曲添加 到普通播放列表"); System.out.println("请输入要添加的播放列表名称:"); String sName = sc.next(); // 根据名称判断播放列表是否在播放器中存在 favouritePlayList = plc.searchPlayListByName(sName); if (favouritePlayList == null) { System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!"); } else { System.out.println("请输入要添加的歌曲的数量"); int count1 = sc.nextInt(); for (int i = 1; i <= count1; i++) { System.out.println("请输入第" + i + "首歌曲:"); System.out.println("请输入歌曲id:"); String strId = sc.next(); // 首先判断id的歌曲是否在主播放列表中存在 Song song = mainPlayList.searchSongById(strId); if (song == null) { System.out.println("该歌曲在主播放列表中不存在,继续输入歌曲的其他信息"); System.out.println("请输入歌曲的名称:"); String strName = sc.next(); System.out.println("请输入演唱者:"); String strSinger = sc.next(); // 创建一个Song类的对象 song = new Song(strId, strName, strSinger); // 分别将歌曲添加普通播放列表和主播放列表 favouritePlayList.addToPlayList(song); mainPlayList.addToPlayList(song); } else { // 如果歌曲存在于主播放列表,则直接添加到现在的播放列表 favouritePlayList.addToPlayList(song); } } // 显示播放列表中的歌曲信息 System.out.println("主播放列表"); mainPlayList.displayAllSong(); System.out.println("普通播放列表"); favouritePlayList.displayAllSong(); } break; case 3: System.out.println("通过歌曲id查询播放列表中的歌曲 "); System.out.println("请输入要查询的播放列表名称: "); String strPlayListName1 = sc.next(); // 查询播放列表是否存在 PlayList pl = plc.searchPlayListByName(strPlayListName1); if (pl == null) { System.out.println("该播放列表不存在!"); break; } else { System.out.println("请输入要查询的歌曲id:"); String strId1 = sc.next(); Song s = pl.searchSongById(strId1); if (s == null) { System.out.println("该歌曲在播放列表" + strPlayListName1 + "中不存在!"); } else { System.out.println("该歌曲的信息为:"); System.out.println(s); } } break; case 4: System.out.println("通过歌曲名称查询播放列表中的歌曲 "); System.out.println("请输入要查询的播放列表名称: "); String strPlayListName2 = sc.next(); PlayList p2 = plc.searchPlayListByName(strPlayListName2); if (p2 == null) { System.out.println("该播放列表不存在!"); break; } else { System.out.println("请输入要查询的歌曲名称:"); String strName = sc.next(); Song s = p2.searchSongByName(strName); if (s == null) { System.out.println("该歌曲在播放列表" + strPlayListName2 + "中不存在!"); } else { System.out.println("该歌曲的信息为:"); System.out.println(s); } } break; case 5: System.out.println("修改播放列表中的歌曲"); System.out.println("请输入要修改的播放列表名称"); String strPlayListName3 = sc.next(); PlayList p3 = plc.searchPlayListByName(strPlayListName3); if (p3 == null) { System.out.println("该播放列表不存在!"); break; } else { System.out.println("请输入要修改的歌曲id:"); String strId3 = sc.next(); Song s = p3.searchSongById(strId3); if (s == null) { System.out.println("该歌曲在播放列表" + strPlayListName3 + "中不存在!"); } else { System.out.println("修改前的歌曲的名称:" + "\n" + s.getName()); System.out.println("修改前的歌曲的演唱者:" + "\n" + s.getSinger()); System.out.println("修改后的歌曲的名称:"); String name = sc.next(); s.setName(name); System.out.println("修改后的歌曲的演唱者:"); String singer = sc.next(); s.setSinger(singer); } } break; case 6: System.out.println("删除播放列表中的歌曲"); System.out.println("请输入要删除的歌曲的所在播放列表:"); String strPlayListname4 = sc.next(); PlayList p4 = plc.searchPlayListByName(strPlayListname4); if (p4 == null) { System.out.println("该播放列表不存在!"); } else { System.out.println("请输入要删除的歌曲id:"); String strId4 = sc.next(); Song s = p4.searchSongById(strId4); if (s == null) { System.out.println("该歌曲在播放列表" + strPlayListname4 + "中不存在!"); } else { System.out.println("删除的歌曲id:"); p4.deleteSong(strId4); System.out.println("删除成功!"); } } break; case 7: System.out.println("显示播放列表中的所有歌曲"); System.out.println("请输入要显示所有歌曲的播放列表名称:"); String strPlayListname5 = sc.next(); PlayList p5 = plc.searchPlayListByName(strPlayListname5); if (p5 == null) { System.out.println("该播放列表不存在!"); } else { p5.displayAllSong(); } break; case 8:// 导出歌单 System.out.println("请输入要导出的播放列表名称:"); String strPlayListname6 = sc.next(); PlayList p6 = plc.searchPlayListByName(strPlayListname6); //p6.getMusicList(); if (p6 == null) { System.out.println("该播放列表不存在!"); } else { p6.exportPlayList(); System.out.println("歌单导出成功!"); } break; default: System.out.println("该数字没有对应的操作!"); break; } } break; case 2: // 播放器管理 while (true) { test.player(); System.out.println("请输入对应的数字对播放器进行管理:"); input2 = sc.nextInt(); if (input2 == 9) break; switch (input2) { case 1: System.out.println("向播放器添加播放列表"); System.out.println("输入要添加的播放列表名称:"); String playerName = sc.next(); // 创建一个新播放列表对象 favouritePlayList = new PlayList(playerName); // 将播放列表添加到播放器Map plc.addPlayList(favouritePlayList); break; case 2: System.out.println("从播放器删除播放列表"); System.out.println("请输入要删除的播放列表"); String strPlayListName = sc.next(); if (strPlayListName.equals("主播放列表")) { System.out.println("主播放列表不能删除"); break; } // 查询播放列表是否存在 PlayList playList1 = plc.searchPlayListByName(strPlayListName); if (playList1 == null) { System.out.println("该播放列表不存在!"); } else { // 存在则删除 plc.deletePlayList(playList1); } break; case 3: System.out.println("通过名字查询播放列表信息"); System.out.println("请输入要查询的播放列表名称:"); String strPlayList1 = sc.next(); PlayList playList2 = plc.searchPlayListByName(strPlayList1); if (playList2 == null) { System.out.println("该播放列表不存在!"); } else { // 显示该播放列表名称及其中的所有歌曲 System.out.println("该播放列表存在!"); System.out.println("该播放列表名称为:" + strPlayList1); playList2.displayAllSong(); } break; case 4: System.out.println("显示所有播放列表名称"); plc.displayListName(); break; default: System.out.println("该数字没有对应的操作!"); break; } } break; default: System.out.println("该数字没有对应的操作!"); break; } } mainPlayList.displayAllSong(); } public static void main(String[] args) { // TODO Auto-generated method stub Test testone = new Test(); // test.testsong(); // test.testPlayList(); // test.testPlayListCollection(); testone.test(); } }
5
收起
正在回答 回答被采纳积分+1
2回答
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星