⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 musicdataaccessor.java

📁 《Java核心技术应用开发》电子工业出版社书籍源代码
💻 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 + -