最近安装了个《荐片播放器》的app,可以看电影天堂的资源,同时提供下载功能。但是,下载之后的文件不是mp4而是分块了,放在Android目录下面。我只是好奇能不能合并文件之后正常播放,于是就用Java写了一端代码。
先说结果,可以播放,但仅限第一段,大概2分钟的样子,不知道是不是合并顺序有问题还是片段合成时候增加了代码,不清楚,仅当一次学习吧。
public class FileUtils {
public static void main(String[] args){
int tail = 0x00000000;
String[] fpaths =new String[0x68];
for (int i = 0; i < fpaths.length; i++) {
String tails=(Integer.toHexString(tail).length()==2)?"000000"+Integer.toHexString(tail):"0000000"+Integer.toHexString(tail);
fpaths[i]="E:\\Downloads\\1917-2019_HD%D6%D0%D3%A2%CB%AB%D7%D6.mp4.ybbk_5e7fe998_"+tails;
tail++;
}
String resultPaht="E:\\Downloads\\1917.mp4";
if(mergeFiles(fpaths,resultPaht)){
System.out.println("merging files is succeed!");
}else {
System.out.println("merging files is failed!");
}
}
public static boolean mergeFiles(String[] fpaths, String resultPath) {
if (fpaths == null || fpaths.length < 1 || TextUtils.isEmpty(resultPath)) {
return false;
}
if (fpaths.length == 1) {
return new File(fpaths[0]).renameTo(new File(resultPath));
}
File[] files = new File[fpaths.length];
for (int i = 0; i < fpaths.length; i ++) {
files[i] = new File(fpaths[i]);
if (TextUtils.isEmpty(fpaths[i]) || !files[i].exists() || !files[i].isFile()) {
return false;
}
}
File resultFile = new File(resultPath);
try {
FileChannel resultFileChannel = new FileOutputStream(resultFile, true).getChannel();
for (int i = 0; i < fpaths.length; i ++) {
FileChannel blk = new FileInputStream(files[i]).getChannel();
resultFileChannel.transferFrom(blk, resultFileChannel.size(), blk.size());
blk.close();
}
resultFileChannel.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
for (int i = 0; i < fpaths.length; i ++) {
files[i].delete();
}
return true;
}
}