8 导出歌单功能问题
package com.zzh.player;
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.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class TestDemo {
// 歌曲类Song测试
public static void testSong() {
Song song1 = new Song("s001", "两只老虎", "小太阳合唱团");
Song song2 = new Song("s002", "小燕子", "风车合唱团");
Song song3 = new Song("s003", "茉莉花", "彩虹合唱团");
Song song4 = new Song("s003", "茉莉花", "彩虹合唱团");
System.out.println(song1.toString());
System.out.println("song1==song3?" + (song1).equals(song3));
System.out.println("song1==song3?" + (song3).equals(song4));
}
// 播放列表类playList测试
public static void testPlayList() {
Song song1 = new Song("s001", "两只老虎", "小太阳合唱团");
Song song2 = new Song("s002", "小燕子", "风车合唱团");
Song song3 = new Song("s003", "茉莉花", "彩虹合唱团");
Song song4 = new Song("s003", "茉莉花", "彩虹合唱团");
// 创建播放列表对象
PlayList mainPlayList = new PlayList("主播放列表");
mainPlayList.addToPlayList(song1);
mainPlayList.addToPlayList(song2);
mainPlayList.addToPlayList(song3);
mainPlayList.addToPlayList(song4);
// 显示播放列表的内容
mainPlayList.displayAllSong();
// 通过id查询歌曲信息
Song songTest1 = mainPlayList.searchSongById("s003");
if (songTest1 != null) {
System.out.println("根据id查询的歌曲信息为:");
System.out.println(songTest1);
} else {
System.out.println("该歌曲不存在");
}
// 通过name查询歌曲信息
Song songTest2 = mainPlayList.searchSongByName("茉莉花");
if (songTest2 != null) {
System.out.println("根据name查询的歌曲信息为:");
System.out.println(songTest2);
} else {
System.out.println("该歌曲不存在");
}
// 修改歌曲信息
Song songUpdate = new Song("s005", "蜗牛与黄鹂鸟", "小太阳");
mainPlayList.updateSong("s003", songUpdate);
mainPlayList.displayAllSong();
// 删除歌曲信息
mainPlayList.deleteSong("s005");
mainPlayList.displayAllSong();
}
// 测试播放列表集合类
public static void testPlayListCollection() {
Song song1 = new Song("s001", "两只老虎", "小太阳合唱团");
Song song2 = new Song("s002", "小燕子", "风车合唱团");
Song song3 = new Song("s003", "茉莉花", "彩虹合唱团");
// 创建主播放列表
PlayList mainPlayList = new PlayList("主播放列表");
// 将歌曲添加到主播放列表中
mainPlayList.addToPlayList(song1);
mainPlayList.addToPlayList(song2);
mainPlayList.addToPlayList(song3);
mainPlayList.displayAllSong();
// 创建新播放列表,从主播放列表中添加歌曲
PlayList favoritePlayList = new PlayList("最喜欢的歌曲");
favoritePlayList.addToPlayList(mainPlayList.getMusicList().get(0));
favoritePlayList.addToPlayList(mainPlayList.getMusicList().get(1));
favoritePlayList.addToPlayList(mainPlayList.getMusicList().get(2));
favoritePlayList.displayAllSong();
// 将两个播放列表添加到播放列表集合中
PlayListCollection plc = new PlayListCollection();
plc.addPlayList(mainPlayList);
plc.addPlayList(favoritePlayList);
plc.displayPlayListName();
// 根据播放列表名称查询播放列表信息,并显示所有歌曲
PlayList playList = null;
playList = plc.searchPlayListByName("最喜欢的歌曲");
playList.displayAllSong();
// 删除播放列表信息
System.out.println("删除前");
plc.displayPlayListName();
System.out.println("删除后");
plc.deletePlayList(favoritePlayList);
plc.displayPlayListName();
}
// 主菜单
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() {
TestDemo td = new TestDemo();
Scanner sc = new Scanner(System.in);
int input = 0, input1 = 0, input2 = 0;
FileOutputStream fos=null;
ObjectOutputStream oos=null;
FileInputStream fis=null;
ObjectInputStream ois=null;
//创建一个播放列表容器(播放器)
PlayListCollection plc=new PlayListCollection();
//创建主播放列表
PlayList mainPlayList=new PlayList("主播放列表");
//将主播放列表添加到播放器中
plc.addPlayList(mainPlayList);
PlayList favoritePlayList=null;
while (true) {
td.mainMenu();
System.out.println("请输入对应数字进行操作:");
input = sc.nextInt();
if (input == 0) {
System.out.println("退出程序");
break;
}
switch (input) {
case 1:
// 播放列表管理
while (true) {
td.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=0;i<count;i++) {
System.out.println("请输入第"+(i+1)+"首歌曲:");
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 strName=sc.next();
//判断播放列表名称是否存在
favoritePlayList=plc.searchPlayListByName(strName);
if(favoritePlayList==null) {
System.out.println("该播放列表不存在,请先将播放列表添加到播放器中");
}else {
System.out.println("请输入要添加的歌曲数量:");
int count1=sc.nextInt();
for(int i=0;i<count1;i++) {
System.out.println("请输入第"+(i+1)+"首歌曲的id:");
String strId1=sc.next();
//首先判断该id是否在主播放列表中是否存在
Song song=mainPlayList.searchSongById(strId1);
if(song==null) {
System.out.println("该歌曲在主播放列表不存在,继续输入歌曲其他信息");
System.out.println("请输入歌曲名称:");
String strName1=sc.next();
System.out.println("请输入演唱者:");
String strSinger1=sc.next();
song=new Song(strId1,strName1,strSinger1);
mainPlayList.addToPlayList(song);
favoritePlayList.addToPlayList(song);
}else {
favoritePlayList.addToPlayList(song);
}
}
//显示播放列表中的歌曲信息
// mainPlayList.displayAllSong();
// favoritePlayList.displayAllSong();
}
break;
case 3:
System.out.println("通过歌曲id查询播放列表歌曲");
System.out.println("请输入要查询的播放列表名称:");
String strPlayListName=sc.next();
//查询播放列表是否存在
PlayList pl=plc.searchPlayListByName(strPlayListName);
if(pl==null) {
System.out.println("该播放列表不存在!");
break;
}else {
System.out.println("请输入要查询的歌曲id");
String strId=sc.next();
Song song=pl.searchSongById(strId);
if(song==null) {
System.out.println("该歌曲在播放列表"+strPlayListName+"中不存在");
}else {
System.out.println("该歌曲的信息为:");
System.out.println(song);
}
}
break;
case 4:
System.out.println("通过歌曲名称查询播放列表歌曲");
System.out.println("请输入要查询的播放列表名称:");
String strPlayListName1=sc.next();
//查询播放列表是否存在
PlayList pl1=plc.searchPlayListByName(strPlayListName1);
if(pl1==null) {
System.out.println("该播放列表不存在!");
break;
}else {
System.out.println("请输入要查询的歌曲名称");
String strName1=sc.next();
Song song=pl1.searchSongByName(strName1);
if(song==null) {
System.out.println("该歌曲在播放列表"+strPlayListName1+"中不存在");
}else {
System.out.println("该歌曲的信息为:");
System.out.println(song);
}
}
break;
case 5:
System.out.println("修改播放列表中的歌曲");
System.out.println("请输入要修改歌曲所在的播放列表");
String playListName=sc.next();
PlayList playList=plc.searchPlayListByName(playListName);
if(playList==null) {
System.out.println("该播放列表不存在");
break;
}
System.out.println("请输入要修改的歌曲id");
String id=sc.next();
Song song=playList.searchSongById(id);
if(song==null) {
System.out.println("要修改的歌曲不存在!");
break;
}else {
System.out.println("请输入更新的歌曲名称");
String name=sc.next();
System.out.println("请输入更新的歌曲演唱者");
String singer=sc.next();
song=new Song(id,name,singer);
playList.updateSong(id, song);
}
break;
case 6:
System.out.println("删除播放列表中的歌曲");
System.out.println("请输入要删除的歌曲id");
String id1=sc.next();
Map<String,PlayList> playListMap=plc.getPlayListMap();
Set<Map.Entry<String,PlayList>> playListSet=playListMap.entrySet();
Iterator<Map.Entry<String,PlayList>> it=playListSet.iterator();
while(it.hasNext()) {
Map.Entry<String,PlayList> entry=it.next();
entry.getValue().deleteSong(id1);
}
break;
case 7:
System.out.println("显示播放列表中的所有歌曲");
System.out.println("请输入要查询的播放列表名称");
String playListName1=sc.next();
PlayList playList1=plc.searchPlayListByName(playListName1);
if(playList1==null) {
System.out.println("该播放列表不存在");
break;
}else {
playList1.displayAllSong();
}
break;
case 8:
System.out.println("导出歌单");
System.out.println("请输入要导出的播放列表名称");
String playListName2=sc.next();
PlayList playList2=plc.searchPlayListByName(playListName2);
if(playList2==null) {
System.out.println("该播放列表不存在");
break;
}
try {
//导出歌单存储信息
fos=new FileOutputStream(playListName2+".txt");
oos=new ObjectOutputStream(fos);
oos.writeObject(playList2);
oos.flush();
fos.close();
oos.close();
//读取歌单信息
fis=new FileInputStream(playListName2+".txt");
ois=new ObjectInputStream(fis);
PlayList playList3=(PlayList)ois.readObject();
playList3.displayAllSong();
fis.close();
ois.close();
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
default:
System.out.println("输入数字没有对应操作!");
break;
}
}
break;
case 2:
// 播放器管理
while (true) {
td.playerMenu();
System.out.println("请选择数字进行播放器管理:");
input2 = sc.nextInt();
if (input2 == 9) {
break;
}
switch (input2) {
case 1:
System.out.println("向播放器添加播放列表");
System.out.println("输入要添加的播放列表名称:");
String playerName=sc.next();
//创建新的播放列表对象
favoritePlayList=new PlayList(playerName);
//将播放列表添加到播放器Map
plc.addPlayList(favoritePlayList);
break;
case 2:
System.out.println("从播放器删除播放列表");
System.out.println("请输入要删除的播放列表名称");
String playListName=sc.next();
if(playListName.equals("主播放列表")) {
System.out.println("主播放列表不能删除");
break;
}
PlayList playList=plc.searchPlayListByName(playListName);
if(playList==null) {
System.out.println("该播放列表不存在!");
}else {
plc.deletePlayList(playList);
}
break;
case 3:
System.out.println("通过名称查询播放列表信息");
System.out.println("请输入要查询的播放列表名称");
String playListName1=sc.next();
PlayList playList1=plc.searchPlayListByName(playListName1);
if(playList1==null) {
System.out.println("该播放列表不存在");
break;
}else {
System.out.println("该播放列表存在");
playList1.displayAllSong();
}
break;
case 4:
System.out.println("显示所有播放列表名称");
plc.displayPlayListName();
break;
default:
System.out.println("输入数字没有对应操作!");
break;
}
}
break;
default:
System.out.println("输入数字没有对应操作!");
break;
}
}
}
// 主方法
public static void main(String[] args) {
TestDemo td = new TestDemo();
td.test();
}
}
fos=new FileOutputStream(playListName2+".txt");
oos=new ObjectOutputStream(fos);
oos.writeObject(playList2);
oos.flush();
fos.close();
oos.close();
//读取歌单信息
fis=new FileInputStream(playListName2+".txt");
ois=new ObjectInputStream(fis);
PlayList playList3=(PlayList)ois.readObject();
playList3.displayAllSong();
fis.close();
ois.close();
1、这里面存储歌单信息 文件里面会是一串乱码,有没有办法把displayAllSong的信息存进去?
2、Serializable接口 经测试 Song类和PlayList类都要实现,为什么?
23
收起
正在回答 回答被采纳积分+1
1回答
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星