导出歌单异常了
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 星