关于导出歌单文本有乱码,主播列表名字设中文总出错只能设英文
package com.imooc.musicplayer; import java.io.Serializable; public class Song implements Serializable{ private String id;// 歌曲ID private String name;// 歌曲名称 private String singer;// 歌曲演唱者 // 构造方法 public Song() { } public Song(String id, String name, String singer) { setId(id); setName(name); setSinger(singer); } // get、set方法 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; } //hashCode和equals方法 @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() == this.getClass()) { Song song = (Song) obj; return (song.getId().equals(this.getId())) && (song.getName().equals(this.getName()) && (song.getSinger().equals(this.getSinger()))); } return false; } //toString方法 @Override public String toString() { return "歌曲信息:歌曲id为:" + id + ", 歌曲名称为:" + name + ",歌曲演唱者为:" + singer ; } } package com.imooc.musicplayer; import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class PlayList implements Serializable{ private String playListName;//播放列表名称 public List<Song> musicPlayList;//播放列表存储的集合 //构造方法 public PlayList() { } public PlayList(String playListName) { setPlayListName(playListName); musicPlayList=new ArrayList<Song>(); } //getset方法 public String getPlayListName() { return playListName; } public void setPlayListName(String playListName) { this.playListName = playListName; } public List<Song> getMusicPlayList() { return musicPlayList; } public void setMusicPlayList(List<Song> musicPlayList) { this.musicPlayList = musicPlayList; } /** * 添加歌曲到播放列表的方法 * @param s Song类型对象 */ public void addToPlayList(Song s) { boolean flag=false; for(Song song:musicPlayList) { if(song.equals(s)) { flag=true; break; } } if(flag) { System.out.println("歌曲已存在,不需重复添加!"); }else { musicPlayList.add(s); } } /** * 显示列表里所有歌曲信息 */ public void displayAllSong() { System.out.println(this.getPlayListName()+"列表里所有歌曲信息为:"); for(Song s:musicPlayList) { System.out.println(s); } } /** * 通过Id查找歌曲 * @param id歌曲id * @return Song类型对象 */ public Song searchById(String id) { Song s=null; for(Song song:musicPlayList) { if(song.getId().equals(id)) { s=song; break; } } return s; } /** * 通过名字查找歌曲 * @param name歌曲名字 * @return Song类型对象 */ public Song searchByName(String name) { Song s=null; for(Song song:musicPlayList) { if(song.getName().equals(name)) { s=song; break; } } return s; } /** * 修改歌曲信息 * @param id歌曲id * @param song Song类型对象 */ public void updateSong(String id,Song song) { Song s=this.searchById(id); if(s==null) { System.out.println("id为"+id+"的歌曲不存在"); }else { this.musicPlayList.remove(s); this.musicPlayList.add(song); System.out.println("修改成功!"); } } /** * 删除歌曲 * @param id 歌曲id */ public void deleteSong(String id) { Song s=this.searchById(id); this.musicPlayList.remove(s); System.out.println("删除成功!"); } } package com.imooc.musicplayer; import java.io.Serializable; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; /** * 播放列表集合 * @author Administrator * */ public class PlayListCollection implements Serializable{ Map<String,PlayList> playMap;//存放播放列表的集合<名字,PlayList对象> public PlayListCollection() { playMap=new HashMap<String,PlayList>(); } public Map<String, PlayList> getPlayMap() { return playMap; } public void setPlayMap(Map<String, PlayList> playMap) { this.playMap = playMap; } /** * 添加播放列表 */ public void addPlayList(PlayList p) { playMap.put(p.getPlayListName(), p); } /** * 删除播放列表 */ public void deletePlayList(PlayList p) { playMap.remove(p.getPlayListName()); System.out.println("删除成功!"); } /** * 通过名字查找播放列表 * @param p 列表的对象 * @return 列表的对象 */ public PlayList searchByName(String name) { PlayList pl=null; Set<String> playListSet=playMap.keySet(); for(String n:playListSet) { if(n.equals(name)) { pl=playMap.get(n); break; } } return pl; } /** * 显示所有列表的名称 */ public void displayListName() { Set<String> nameSet=playMap.keySet(); System.out.println("所有的播放列表名称为:"); for(String n:nameSet) { System.out.println(n); } } } package com.imooc.musicplayer; import java.io.BufferedOutputStream; 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.List; import java.util.Scanner; public class TestDemo { public void testSong() { Song s1 = new Song("s001", "两只老虎", "小太阳合唱团"); Song s2 = new Song("s002", "小燕子", "彩虹合唱团"); Song s3 = new Song("s003", "读书郎", "黑天鹅合唱团"); Song s4 = new Song("s003", "读书郎", "黑天鹅合唱团"); System.out.println(s1); System.out.println("s1==s2?" + s1.equals(s2)); System.out.println("s3==s3?" + s3.equals(s3)); System.out.println("s3==s4?" + s3.equals(s4)); } public void testPlayList() { Song s1 = new Song("s001", "两只老虎", "小太阳合唱团"); Song s2 = new Song("s002", "小燕子", "彩虹合唱团"); Song s3 = new Song("s003", "读书郎", "黑天鹅合唱团"); Song s4 = new Song("s004", "读书郎", "黑天鹅合唱团"); // 创建PlayList对象 PlayList p = new PlayList("主播放器"); p.addToPlayList(s1); p.addToPlayList(s2); p.addToPlayList(s3); p.addToPlayList(s4); // 显示播放列表所有歌曲信息 p.displayAllSong(); // 通过id查找歌曲 System.out.println("通过id查找歌曲"); Song song1 = p.searchById("s001"); if (song1 == null) { System.out.println("该歌曲不存在"); } else { System.out.println(song1); } // 通过名字查找歌曲 System.out.println("通过名字查找歌曲"); Song song2 = p.searchByName("两只老虎"); if (song2 == null) { System.out.println("该歌曲不存在"); } else { System.out.println(song2); } // 修改歌曲信息 Song s = new Song("s004", "蜗牛与黄鹂鸟", "水木年华组合"); p.updateSong("s004", s); p.displayAllSong(); // 删除歌曲 p.deleteSong("s001"); p.displayAllSong(); } public void testPlayListCollection() { PlayListCollection plc = new PlayListCollection(); Song s1 = new Song("s001", "两只老虎", "小太阳合唱团"); Song s2 = new Song("s002", "小燕子", "彩虹合唱团"); Song s3 = new Song("s003", "读书郎", "黑天鹅合唱团"); Song s4 = new Song("s004", "读书郎", "黑天鹅合唱团"); // 创建PlayList对象 PlayList p = new PlayList("主播放器"); p.addToPlayList(s1); p.addToPlayList(s2); p.addToPlayList(s3); p.addToPlayList(s4); // 创建PlayList对象 PlayList p1 = new PlayList("最喜欢的歌曲"); p1.addToPlayList(p.getMusicPlayList().get(0)); p1.addToPlayList(p.getMusicPlayList().get(1)); // 添加进集合 plc.addPlayList(p); plc.addPlayList(p1); System.out.println("显示所有列表名称:"); p.displayAllSong(); p1.displayAllSong(); plc.displayListName(); plc.deletePlayList(p1); System.out.println("显示所有列表名称:"); plc.displayListName(); System.out.println(plc.searchByName("主播放器").getPlayListName()); } // 主菜单 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 playerMenu() { 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() { Scanner sc = new Scanner(System.in); PlayList mainPlay = new PlayList("mainPlayer"); PlayListCollection plc=new PlayListCollection(); plc.addPlayList(mainPlay); PlayList newPlayList; while (true) { this.mainMenu(); System.out.println("请输入数字:"); try { int n = sc.nextInt(); if (n == 0) { System.out.println("结束程序!"); break; } else if (n == 1) { while (true) { this.playListMenu(); System.out.println("请输入数字:"); int no = sc.nextInt(); if (no == 9) { System.out.println("返回上一级菜单"); break; } switch (no) { case 1: System.out.println("将歌曲添加到主播放列表"); System.out.println("要添加到主播放列表的歌曲数量:"); int num = sc.nextInt(); for (int i = 1; i <= num; i++) { System.out.println("请输入第"+i+"首歌曲的信息:"); System.out.println("请输入歌曲id:"); String id = sc.next(); System.out.println("请输入歌曲名称:"); String name = sc.next(); System.out.println("请输入歌曲演唱者:"); String singer = sc.next(); Song s = new Song(id, name, singer); mainPlay.addToPlayList(s); } System.out.println("添加成功"); break; case 2: System.out.println("将歌曲添加到普通播放列表"); System.out.println("请输入要添加进的播放列表名称:"); String name=sc.next(); newPlayList=plc.searchByName(name); if(newPlayList==null) { System.out.println("请先添加播放列表"); }else { System.out.println("请输入要添加的歌曲的名称:"); String strName=sc.next(); Song song=newPlayList.searchByName(strName); if(song==null) { System.out.println("主播放器中没有该歌曲,请输入歌曲的详细信息:"); System.out.println("该歌曲的id为:"); String strId=sc.next(); System.out.println("该歌曲的演唱者为:"); String strSinger=sc.next(); Song s=new Song(strId,strName,strSinger); mainPlay.addToPlayList(s); newPlayList.addToPlayList(s); System.out.println("添加成功"); }else { newPlayList.addToPlayList(song); if(newPlayList.searchByName(strName)==null) { System.out.println("添加成功"); } } } break; case 3: System.out.println("通过歌曲id查询播放列表中的歌曲"); System.out.println("请输入要查询的列表名称:"); String pn=sc.next(); PlayList pla=plc.searchByName(pn); if(pla==null) { System.out.println("该列表不存在,请先添加列表"); break; }else { System.out.println("请输入要查询的id:"); String id=sc.next(); Song s=pla.searchById(id); if(s==null) { System.out.println("id为"+id+"的歌曲在名为"+pn+"的播放列表中不存在"); break; }else { System.out.println("找到了"); System.out.println(s); } } break; case 4: System.out.println("通过歌曲名称查询播放列表中的歌曲"); System.out.println("请输入要查询的列表名称:"); String pln=sc.next(); PlayList ply=plc.searchByName(pln); if(ply==null) { System.out.println("该列表不存在,请先添加列表"); break; }else { System.out.println("请输入要查询的歌曲名称:"); String sn=sc.next(); Song s=ply.searchByName(sn); if(s==null) { System.out.println("名称为"+sn+"的歌曲在名为"+pln+"的播放列表中不存在"); break; }else { System.out.println("找到了"); System.out.println(s); } } break; case 5: System.out.println("修改播放列表中的歌曲"); System.out.println("请输入要修改的列表名称:"); String playn=sc.next(); PlayList plyl=plc.searchByName(playn); if(plyl==null) { System.out.println("该列表不存在,请先添加列表"); break; }else { System.out.println("请输入要修改的歌曲id:"); String sId=sc.next(); Song so=plyl.searchById(sId); if(so==null) { System.out.println("该歌曲不存在,请重新输入"); break; }else { System.out.println("请输入修改歌曲的详细信息:"); System.out.println("请输入歌曲id:"); String newId=sc.next(); System.out.println("请输入歌曲名称:"); String newName=sc.next(); System.out.println("请输入歌曲演唱者:"); String newSinger=sc.next(); Song newSong=new Song(newId,newName,newSinger); if(plyl.equals(mainPlay)) { plyl.updateSong(sId, newSong); }else { plyl.updateSong(sId, newSong); mainPlay.updateSong(sId, newSong); } } } break; case 6: System.out.println("删除播放列表中的歌曲"); System.out.println("请输入要删除的歌曲所在列表名称:"); String plin=sc.next(); PlayList pliy=plc.searchByName(plin); if(pliy==null) { System.out.println("该列表不存在,请先添加列表"); break; }else { System.out.println("请输入要删除歌曲的id:"); String deleId=sc.next(); Song deleSong=pliy.searchById(deleId); if(deleSong==null) { System.out.println("该歌曲不存在,请重新输入"); break; }else { pliy.deleteSong(deleId); } } break; case 7: System.out.println("显示播放列表中的所有歌曲"); System.out.println("请输入要删除的歌曲所在列表名称:"); String plisn=sc.next(); PlayList plisy=plc.searchByName(plisn); if(plisy==null) { System.out.println("该列表不存在,请先添加列表"); break; }else { plisy.displayAllSong(); } break; case 8: System.out.println("导出歌单"); System.out.println("请输入要导出歌单的列表名称:"); String tn=sc.next(); PlayList tpl=plc.searchByName(tn); if(tpl==null) { System.out.println("该列表不存在,请重新输入"); break; }else { try { FileOutputStream fos=new FileOutputStream(tn+".txt"); ObjectOutputStream oos=new ObjectOutputStream(fos); FileInputStream fis=new FileInputStream(tn+".txt"); ObjectInputStream ois=new ObjectInputStream(fis); for(Song sg:tpl.getMusicPlayList()) { oos.writeObject(sg); oos.flush(); System.out.println(((Song)ois.readObject())); } fos.close(); oos.close(); fis.close(); ois.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block //e.printStackTrace(); }catch (ClassNotFoundException e) { // TODO Auto-generated catch block //e.printStackTrace(); }catch (IOException e) { // TODO Auto-generated catch block //e.printStackTrace(); } } break; default: System.out.println("没有该数字对应的操作"); break; } } } else if (n == 2) { while(true) { this.playerMenu(); System.out.println("请输入数字:"); int nu = sc.nextInt(); if (nu == 9) { System.out.println("返回上一级菜单"); break; } switch (nu) { case 1: System.out.println("向播放器添加播放列表"); System.out.println("请输入播放列表的名称:"); String name=sc.next(); newPlayList=new PlayList(name); plc.addPlayList(newPlayList); System.out.println("添加成功"); break; case 2: System.out.println("从播放器删除播放列表"); System.out.println("请输入要删除列表的名字:"); String cpn=sc.next(); PlayList pl1=plc.searchByName(cpn); if(pl1==null) { System.out.println("该列表不存在,请重新输入"); break; }else { plc.deletePlayList(pl1); System.out.println("删除成功"); } break; case 3: System.out.println("通过名字查询播放列表信息"); System.out.println("请输入要查询列表的名字:"); String pcn=sc.next(); PlayList pl2=plc.searchByName(pcn); if(pl2==null) { System.out.println("该列表不存在,请重新输入"); break; }else { System.out.println("删除成功"); plc.getPlayMap().get(pcn).displayAllSong(); } break; case 4: System.out.println("显示所有播放列表名称"); plc.displayListName(); break; default: System.out.println("没有该数字对应的操作"); break; } } } else { System.out.println("输入的数字有误,请重新输入"); } } catch (java.util.InputMismatchException e) { String s = sc.next(); System.out.println("输入的不是整数型数字,请重新输入"); } } } public static void main(String[] args) { // TODO Auto-generated method stub TestDemo td = new TestDemo(); // td.testSong(); // td.testPlayList(); // td.testPlayListCollection(); td.test(); } }
为什么我导出的歌单文本是乱码?设置主播放列表名字用中文,写主流程的searchById的方法时发现有时候就找不到播放列表,后来我把主播放列表名字用英文,一切都正常了,这是怎么回事呢?
4
收起
正在回答
2回答
同学你好,主播列表名字设中文的问题我在以下链接中回答了同学哦~
http://class.imooc.com/course/qadetail/125389
导出歌单文件,是输出对象到txt,就是会乱码。
乱码没问题的,如果能读取就是正确的。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
好帮手慕柯南
2019-06-14 12:09:44
同学你好!可能是由于同学eclipse工作空间的编码,和java文件的编码格式不同导致的。同学可以按照以下步骤来更改测试一下
更改eclipse工作空间的编码
window -> preferences -> General -> Workspace
修改java文件的编码
window -> preferences -> General -> Content Types
右边找到要修改的文件的类型,我这边以*.java为例
在下面的Default encoding,输入框中输入UTF-8->Update->OK
如果我的回答结局解决了你的疑惑,请采纳,祝学习愉快~
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星