package bytes;import java.text.DecimalFormat;import java.text.NumberFormat;publicclassNumberTest{publicstaticvoidmain(String[] args){
String name ="阿凡达.mp4";int index = name.indexOf(".");
String x = name.substring(0, index );
System.out.println("原点之前: "+ x );
String y = name.substring( index );
System.out.println("原点之后: "+ y );for(int i =1; i <=17; i++){
System.out.println( x +( i <10?("0")+ i : i ));}
System.out.println("~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~");
NumberFormat nf =newDecimalFormat("00");for(int i =1; i <=17; i++){
System.out.println( x + nf.format( i ));}finalint size =1<<20;
System.out.println( size );}}
FileHelper.java
package bytes;import java.io.File;import java.io.FileFilter;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Arrays;publicfinalclassFileHelper{/**
* 将第一个参数传入的文件拆分后依次序存储到第二个参数对应的目录下
* @param file 被拆分的源文件
* @param path 拆分后的问价存储路径
* @param size 表示每个小文件的最大体积
*/publicstaticvoidsplit( File file , File path ,int size )throws IOException {if(!file.exists()||!file.isFile()){thrownewIllegalArgumentException("被拆分的文件不存在");}if(!path.exists()||!path.isDirectory()){thrownewIllegalArgumentException("目标位置不存在或不有效目录");}// 获取文件体积finallong length = file.length();// 获取原文件名final String name = file.getName();
String prefix ="";
String suffix ="";int index = name.indexOf(".");if( index >0){
prefix = name.substring(0, index );
suffix = name.substring( index );}else{
prefix = name ;}// 统计拆分后的文件数long n = length / size;if( length % size !=0){
n++;}
InputStream in =newFileInputStream( file );finalbyte[] bytes =newbyte[ size ];for(int i =1; i <= n ; i++){// 暂时不考虑 n > 99 的情况
String filename = prefix +"#"+( i <10?("0"+ i ): i )+ suffix ;int x = in.read( bytes );// 从 字节输入流 中读取数据到 bytes 数组中并返回实际读取到的有效字节数
File dest =newFile( path , filename );
OutputStream out =newFileOutputStream( dest );
out.write( bytes ,0, x );// 将 bytes 数组中 [ 0 , x ) 之间的字节写入到输出流中
out.close();}// 从 file 所表示的文件中读取数据,每次读取 50MB ,写出到一个新文件中// 假设大文件名称为 阿凡达.mp4 ( 1576MB ) ,则拆分后的文件为 "阿凡达01" 、 "阿凡达02" ...
in.close();}/**
* 将第一个参数传入的目录中有序的文件合并到一个大文件( 第二个参数表示合并后的文件的存储位置 )
* @param path 依次序存放了一批等待合并的小文件的目录
* @param dest 合并之后的大文件的存储路径
*/publicstaticvoidjoin( File path , File dest ){if(!path.exists()||!path.isDirectory()){thrownewIllegalArgumentException("目录不存在或不有效目录");}
File destParent = dest.getParentFile();if(!destParent.exists()||!destParent.canWrite()){thrownewIllegalArgumentException("目标位置的父目录不存在");}
FileFilter fileFilter =newFileFilter(){@Overridepublicbooleanaccept(File pathname){return pathname.isFile();}};
File[] files = path.listFiles( fileFilter );// 可以考虑使用 FileFilter 对文件进行过滤
System.out.println( Arrays.toString( files ));// 使用 比较器 对 files 数组中的元素按照 文件名称进行排序// 排序之后再考虑合并}}