关于导出歌单文本有乱码,主播列表名字设中文总出错只能设英文

关于导出歌单文本有乱码,主播列表名字设中文总出错只能设英文

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的方法时发现有时候就找不到播放列表,后来我把主播放列表名字用英文,一切都正常了,这是怎么回事呢?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,主播列表名字设中文的问题我在以下链接中回答了同学哦~

http://class.imooc.com/course/qadetail/125389

导出歌单文件,是输出对象到txt,就是会乱码。

乱码没问题的,如果能读取就是正确的。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

好帮手慕柯南 2019-06-14 12:09:44

同学你好!可能是由于同学eclipse工作空间的编码,和java文件的编码格式不同导致的。同学可以按照以下步骤来更改测试一下

  1. 更改eclipse工作空间的编码

    window -> preferences ->  General -> Workspace

    http://img1.sycdn.imooc.com//climg/5d031ccc0001963408270710.jpg

  2. 修改java文件的编码

    window -> preferences ->  General -> Content Types

    右边找到要修改的文件的类型,我这边以*.java为例

    在下面的Default encoding,输入框中输入UTF-8->Update->OK 

    http://img1.sycdn.imooc.com//climg/5d031dc70001143606790561.jpg

如果我的回答结局解决了你的疑惑,请采纳,祝学习愉快~

  • 提问者 慕娘0924178 #1
    还是没有解决主播列表名字设中文总出错只能设英文的问题,还有歌单文本有乱码这个问题又该怎么解决呢
    2019-06-15 00:29:07
  • 好帮手慕柯南 回复 提问者 慕娘0924178 #2
    建议同学重新创建一个项目测试一下呢。祝学习愉快~
    2019-06-15 11:22:00
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师