📄 musicdataaccessor.java
字号:
import java.util.*;
import java.io.*;
/**
* 音乐CD数据读取的实现类
*
*/
public class MusicDataAccessor extends DataAccessor {
//////////////////////////////////////////////////////
//
// 文件格式如下
// 歌手姓名, 唱片名, 类别, 图片名, 歌曲数目
// 歌曲 #1, 总秒数
// 歌曲 #2, 总秒数
// ----------------------------
//
///////////////////////////////////////////////////////
/**
* 数据文件名
*/
protected static final String FILE_NAME = "music.db";
/**
* 纪录的分割符
*/
protected static final String RECORD_SEPARATOR = "----------";
/**
* 默认构造方法
*
*/
public MusicDataAccessor() {
load();
}
/**
* 读取数据的方法
*/
public void load() {
dataTable = new HashMap();
ArrayList musicArrayList = null;
StringTokenizer st = null;
MusicRecording myRecording;
String line = "";
String artist, title;
String category, imageName;
int numberOfTracks;
int basePrice;
double price;
Track[] trackList;
try
{
log("读取文件: " + FILE_NAME + "...");
BufferedReader inputFromFile = new BufferedReader(new FileReader(FILE_NAME));
while ( (line = inputFromFile.readLine()) != null ) {
st = new StringTokenizer(line, ",");
artist = st.nextToken().trim();
title = st.nextToken().trim();
category = st.nextToken().trim();
imageName = st.nextToken().trim();
numberOfTracks = Integer.parseInt(st.nextToken().trim());
trackList = readTracks(inputFromFile, numberOfTracks);
basePrice = 9 + (int) (Math.random() * 7);
price = basePrice + .99;
myRecording = new MusicRecording(artist, trackList, title,
price, category, imageName);
if (dataTable.containsKey(category)) {
musicArrayList = (ArrayList) dataTable.get(category);
}
else {
musicArrayList = new ArrayList();
dataTable.put(category, musicArrayList);
}
musicArrayList.add(myRecording);
line = inputFromFile.readLine();
}
inputFromFile.close();
log("文件读取结束!");
log("准备就绪!\n");
}
catch (FileNotFoundException exc) {
log("没有找到文件 \"" + FILE_NAME + "\".");
log(exc);
}
catch (IOException exc) {
log("发生异常: " + FILE_NAME);
log(exc);
}
}
/**
* 获得歌曲集合的帮助方法
*
* @param inputFromFile 文件名
* @param numberOfTracks the 歌曲数目
*
*/
protected Track[] readTracks(BufferedReader inputFromFile, int numberOfTracks)
throws IOException
{
Track[] trackList = new Track[numberOfTracks];
StringTokenizer st;
String trackLine;
String trackName;
Duration trackDuration;
int totalSeconds;
for (int i=0; i < numberOfTracks; i++)
{
trackLine = inputFromFile.readLine();
st = new StringTokenizer(trackLine, ",");
trackName = st.nextToken().trim();
totalSeconds = Integer.parseInt(st.nextToken().trim());
trackDuration = new Duration(totalSeconds);
trackList[i] = new Track(trackName, trackDuration);
}
return trackList;
}
/**
* 保存数据
*/
public void save() {
}
/**
* 日志方法.
*/
protected void log(Object msg) {
System.out.println("MusicDataAccessor类: " + msg);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -