今天想从酷狗中导出播放列表的歌曲到U盘,发现酷狗只支持导出列表,无奈自己写一个程序来导出,顺便温习一下digester的使用,哈哈。
apache的digester已经升到3.2的版本,3以后的版本比较爽,可以直接使用annotation来定义rule。
1.酷狗播放列表长的什么样呢?
他导出的是以
.kgl后缀的文件,其实就是xml格式的,哈哈,如下:
<?xml version="1.0" encoding="UTF-8"?>
<List ListName="赵传">
<File>
<MediaFileType>0</MediaFileType>
<FileName>赵传 - 爱要怎么说出口.mp3</FileName>
<FilePath>H:\01-娱乐\01-音乐\KuGou\</FilePath>
<FileSize>6748736</FileSize>
<Duration>281208</Duration>
<Hash>359db1787952c1d65803c3936796402c</Hash>
<Lyric></Lyric>
<Bitrate>191992</Bitrate>
</File>
<File>
<MediaFileType>0</MediaFileType>
<FileName>赵传 - 我终于失去了你.mp3</FileName>
<FilePath>H:\01-娱乐\01-音乐\KuGou\</FilePath>
<FileSize>6833544</FileSize>
<Duration>285152</Duration>
<Hash>cb4c43fe3d214b48be2228040babcaed</Hash>
<Lyric></Lyric>
<Bitrate>191716</Bitrate>
</File>
</list>
2.怎么定义播放列表呢?
2.1 定义播放列表实体
@ObjectCreate(pattern = "List")
public class MusicPlayList implements Serializable {
private static final long serialVersionUID = -5345631686784548242L;
@SetProperty(pattern = "List", attributeName = "ListName")
private String name;
private List<MusicFile> fileList = new ArrayList<MusicFile>();
@SetNext
public void addFile(MusicFile file) {
fileList.add(file);
}
// Getter and Setter
}
2.2 定义关联音乐文件实体
public class MusicFile implements Serializable {
private static final long serialVersionUID = 1428265224588267115L;
@BeanPropertySetter(pattern="List/File/MediaFileType")
private String mediaFileType;
@BeanPropertySetter(pattern="List/File/FileName")
private String fileName;
@BeanPropertySetter(pattern="List/File/FilePath")
private String filePath;
@BeanPropertySetter(pattern="List/File/FileSize")
private long fileSize;
@BeanPropertySetter(pattern="List/File/Duration")
private String duration;
@BeanPropertySetter(pattern="List/File/Hash")
private String hash;
@BeanPropertySetter(pattern="List/File/Lyric")
private String lyric;
@BeanPropertySetter(pattern="List/File/Bitrate")
private long bitrate;
public File getFile() {
return new File(getFilePath(), getFileName());
}
// Getter and Setter
}
3. 然后如何让定义的annotation生效?
DigesterLoader digesterLoader = DigesterLoader.newLoader(new FromAnnotationsRuleModule() {
@Override
protected void configureRules() {
bindRulesFrom(MusicPlayList.class);
}
});
Digester digester = digesterLoader.newDigester();
URL dataUrl = Thread.currentThread().getClass().getResource(playListFile);
try {
return digester.parse(dataUrl);
}
catch (Exception e) {
throw new RuntimeException("Play list parse failuer.", e);
}
4. 好了,应该可以拷贝文件了吧
是的,可以看看我们的工具类了
public class ExportTool {
public static void exportFileFromPlayList(String playListFile, String toDir) {
MusicPlayList playList = digesterPlayList(playListFile);
File tofolder = new File(toDir, playList.getName());
if (!tofolder.exists()) {
tofolder.mkdirs();
}
Iterator<MusicFile> musicFilesInterator = playList.list();
while (musicFilesInterator.hasNext()) {
MusicFile file = musicFilesInterator.next();
if (!file.getFile().exists()) {
continue;
}
copy(file.getFile(), tofolder);
}
}
private static MusicPlayList digesterPlayList(String playListFile) {
DigesterLoader digesterLoader = DigesterLoader.newLoader(new FromAnnotationsRuleModule() {
@Override
protected void configureRules() {
bindRulesFrom(MusicPlayList.class);
}
});
Digester digester = digesterLoader.newDigester();
URL dataUrl = Thread.currentThread().getClass().getResource(playListFile);
try {
return digester.parse(dataUrl);
}
catch (Exception e) {
throw new RuntimeException("Play list parse failuer.", e);
}
}
private static void copy(File from, File toFolder) {
try {
File toFile = new File(toFolder, from.getName());
if (toFile.exists()) {
return;
}
InputStream input = new FileInputStream(from);
OutputStream output = new FileOutputStream(toFile);
IOUtils.copy(input, output);
}
catch (Exception e) {
throw new RuntimeException("Copy file from [" + from.getAbsolutePath() + "] to [" + toFolder.getAbsolutePath() + "] failure.");
}
}
}
5. 这个功能还不错,但是我们依赖那些工具呢?
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-digester3</artifactId>
<version>3.2</version>
</dependency>
6. 具体的代码在附件,可以参考一下哦
分享到:
相关推荐
可以导出在SAP系统中的自定义程序,导出的自定义程序中含有的自定义函数,自定义结构表格都连带导出,导出的格式文件夹包含的html。
cad文字导出到记事本 lisp程序 cad文字导出到记事本 lisp程序 cad文字导出到记事本 lisp程序
java程序对列表中的信息导出到excel文件中。
易语言超级列表框快速导出EXCEL源码,超级列表框快速导出EXCEL,超级列表框保存为EXCEL
易语言超级列表框导出到Excel表格模块源码例程程序调用API函数实现超级列表框导出到Excel表格。易语言超级列表框导出到Excel表格模块源码使用HTML表格格式写出。资源作者:。资源界面:。资源下载:。
Oracle导出程序Exp的使用
Step7 Microwin SMART如何进行子程序的导出和导入操作?
获取windows电脑中软件列表并导出到excel。
超级列表框导入excel和导出excel(支持导入导出表头)用黑夜上传的LibXL模块弄的,。@田心南。Tags:ExcelEXCEL导入导出excel表。
把table列表导出为excel格式,可自定义表格宽高,表名字,等等.
export installed software name list 重装系统时,如需知道重装前安装了哪些软件,可通过该工具先将已安装的软件名称列表导出,重装后再按照此列表中的名称逐一安装即可。
PB跨平台数据同步的程序支持不同种类的数据库SQLSERVER ORACLE SYBASE 等
.net程序导出到Excel 可以自定义格式。
oracle中 在编辑器中 oracle sql developer中 批量导出程序包代码内容
poi作为导出excel常用的工具,方便快捷。对于excel指定下拉列表的列,如何生成呢?本文提供如何生成下拉列表的excel列
这个文件是导出Excel的Java类,poi导出excel
大家一定使用过 PHPmyadmin 里面的数据库导入,导出功能,非常方便。但是在实际应用中,我发现如下几个问题: 1 数据库超过一定尺寸,比如6M 这时...这个简单的程序目前一次保存一个表格!!每行为一个字段的数据!!
ICS日历导出导入 源程序。。。。。。。。。。。。。。。
易语言导出超级列表框数据到Excel源码,导出超级列表框数据到Excel,公共_导出超级列表框到Execl,公共_状态条置文本,公共_连接数据库,公共_刷新超级列表框列宽