📄 epgloader.java
字号:
package com.temobi.epg.publisher.bo;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.temobi.epg.publisher.EpgPublisherConstant;
import common.context.SystemContext;
import common.exception.BakupException;
import common.exception.RestoreException;
import common.log.proxy.JLogger;
import common.log.proxy.LoggerFactory;
import common.util.FileTool;
import common.util.HttpLoader;
/**
* EPG文件下载
*
* @author lixu
*
*/
public class EpgLoader {
private static JLogger log = LoggerFactory.getLogger(EpgLoader.class);
private List<String> loadUrls;
private String epgRootDir;
public EpgLoader(List<String> loadUrls) {
this.loadUrls = loadUrls;
this.epgRootDir = SystemContext.getInstance().getValue(
EpgPublisherConstant.EPG_DIR);
}
/**
* 下载
*
* @throws IOException
*/
public void load() throws IOException, BakupException {
// 解析EPG目录结构
List<String> dirs = EpgDirTool.parseEpgDirFromUrl(loadUrls);
// 如果EPG目录不存在,创建EPG目录结构
EpgDirTool.createEpgDirStructor(dirs, this.epgRootDir);
// 获取第一层目录
List<String> levelOneDirs = EpgDirTool.getLevelOneEpgDir(dirs);
List<File> levelOneFiles = this.formatToFile(levelOneDirs);
// 创建临时用的EPG目录结构
List<File> tempFiles = EpgDirTool.createTempEpgDirStructor(dirs,
this.epgRootDir);
// 把远程的EPG文件下载到临时目录里
for (String url : loadUrls) {
HttpLoader httpLoader = new HttpLoader();
File file = EpgDirTool.generateTempEpgFile(url, this.epgRootDir);
httpLoader.load(url, file);
}
// 把当前的目录进行重命名备份
List<File> bakFiles = this.bakupEpgDir(levelOneFiles);
// 把临时文件命名为正式文件
File tempFile;
File file;
try {
for (int i = 0; i < tempFiles.size(); i++) {
tempFile = tempFiles.get(i);
file = levelOneFiles.get(i);
if (!tempFile.renameTo(file))
throw new IOException("Rename file["
+ tempFile.getAbsolutePath() + "] to file["
+ file.getAbsolutePath() + "] occur error!");
}
log.info("load epg success!");
} catch (IOException e) {
log.warn(e.getMessage());
// 还原
this.restoreEpgDir(levelOneFiles, bakFiles);
}
EpgDirTool.deleteMoreBakupDir(new File(this.epgRootDir));
}
/**
* 把用字符串表示的文件格式为File对象
*
* @param levelOneDirs
* @return
*/
private List<File> formatToFile(List<String> levelOneDirs) {
List<File> files = new ArrayList<File>(levelOneDirs.size());
for (String src : levelOneDirs) {
File f = new File(this.epgRootDir + src);
files.add(f);
}
return files;
}
/**
* 对EPG目录结构进行重命名备份
*
* @param dirs
* @return
* @throws BakupException
*/
private List<File> bakupEpgDir(List<File> dirs) throws BakupException {
List<File> bakFiles = new ArrayList<File>(dirs.size());
Date now = new Date();
File bakFile;
for (File f : dirs) {
bakFile = EpgDirTool.generateBakupFile(f, now);
bakFiles.add(bakFile);
FileTool.bakup(f, bakFile);
}
return bakFiles;
}
/**
* 还原EPG备份的目录
*
* @param dirs
* @param bakDirs
* @throws BakupException
*/
private void restoreEpgDir(List<File> dirs, List<File> bakDirs)
throws BakupException {
for (int i = 0; i < dirs.size(); i++) {
try {
FileTool.restore(dirs.get(i), bakDirs.get(i));
} catch (RestoreException e) {
log.error(e.getMessage(), e);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -