使用类RandomAccessFile,其中方法seek可以自定义读取位置,读一段,通过字节输出流(我使用BufferedOutputStream)写一段
读取多个文件写入一个文件,读取使用字节输入流(BufferedInputStream),输出使用字节输出流就可以(BufferedOutputStream)
RandomAccessFile raf=
RandomAccessFile (fSrc,"r" BufferedOutputStream bos=<span style="color: #0000ff">new BufferedOutputStream(<span style="color: #0000ff">new FileOutputStream(<span style="color: #0000ff">new File(<span style="color: #0000ff">this<span style="color: #000000">.list.get(i))));
BufferedInputStream bis=<span style="color: #0000ff">new BufferedInputStream(<span style="color: #0000ff">new FileInputStream(<span style="color: #0000ff">new<span style="color: #000000"> File(fileName)));
BufferedOutputStream raf=<span style="color: #0000ff">new BufferedOutputStream(<span style="color: #0000ff">new FileOutputStream(<span style="color: #0000ff">new File("D://destdir//HugeCHM.rar"),<span style="color: #0000ff">true),1024);
<span style="color: #0000ff">import<span style="color: #000000"> java.io.BufferedOutputStream;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.File;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.FileNotFoundException;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.FileOutputStream;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.IOException;
<span style="color: #0000ff">import<span style="color: #000000"> java.io.RandomAccessFile;
<span style="color: #0000ff">import<span style="color: #000000"> java.util.ArrayList;
<span style="color: #0000ff">import<span style="color: #000000"> java.util.List;
<span style="color: #008000">/*<span style="color: #008000">
-
文件切割
-
<span style="color: #808080">@author<span style="color: #008000"> Administrator
-
<span style="color: #008000">*/
<span style="color: #0000ff">public <span style="color: #0000ff">class<span style="color: #000000"> FileSplit {
<span style="color: #008000">/*<span style="color: #008000">
- 定义,初始化参数
<span style="color: #008000">*/
<span style="color: #0000ff">private File fSrc=<span style="color: #0000ff">null<span style="color: #000000">;
<span style="color: #008000">//<span style="color: #008000">目标文件夹地址
<span style="color: #0000ff">private <span style="color: #0000ff">static File fDest=<span style="color: #0000ff">new File("D://destdir"<span style="color: #000000">);
<span style="color: #008000">//<span style="color: #008000">默认是1024 切割后文件大小
<span style="color: #0000ff">private <span style="color: #0000ff">int<span style="color: #000000"> blockSize;
<span style="color: #008000">//<span style="color: #008000">切割块数
<span style="color: #0000ff">private <span style="color: #0000ff">int<span style="color: #000000"> blockNumber;
<span style="color: #008000">//<span style="color: #008000">源文件大小
<span style="color: #0000ff">private <span style="color: #0000ff">int<span style="color: #000000"> size;
<span style="color: #008000">//<span style="color: #008000">存储切割后文件名称
<span style="color: #0000ff">private List<span style="color: #000000"> list;
<span style="color: #008000">/*<span style="color: #008000">
- 定义构造方法
<span style="color: #008000">*/
<span style="color: #0000ff">private<span style="color: #000000"> FileSplit() {
<span style="color: #0000ff">super<span style="color: #000000">();
list=<span style="color: #0000ff">new ArrayList<span style="color: #000000">();
}
<span style="color: #0000ff">public<span style="color: #000000"> FileSplit(File fSrc,File fDest) {
<span style="color: #0000ff">this(fSrc,fDest,1024<span style="color: #000000">);
}
<span style="color: #0000ff">public FileSplit(File fSrc,<span style="color: #0000ff">int<span style="color: #000000"> blockSize) {
<span style="color: #0000ff">this<span style="color: #000000">(fSrc,blockSize);
}
<span style="color: #0000ff">public<span style="color: #000000"> FileSplit(String strSrc,String destSrc) {
<span style="color: #0000ff">this(strSrc,destSrc,1024<span style="color: #000000">);
}
<span style="color: #0000ff">public FileSplit(String strSrc,String destSrc,<span style="color: #0000ff">int<span style="color: #000000"> blockSize) {
<span style="color: #0000ff">this(<span style="color: #0000ff">new File(strSrc),<span style="color: #0000ff">new<span style="color: #000000"> File(destSrc),blockSize);
}
<span style="color: #0000ff">public FileSplit(File fSrc,File fDest,<span style="color: #0000ff">int<span style="color: #000000"> blockSize) {
<span style="color: #0000ff">this<span style="color: #000000">();
<span style="color: #0000ff">this.fSrc =<span style="color: #000000"> fSrc;
<span style="color: #0000ff">this.fDest =<span style="color: #000000"> fDest;
<span style="color: #0000ff">this.blockSize =<span style="color: #000000"> blockSize;
init();
}
<span style="color: #008000">/*<span style="color: #008000">
- 初始化
<span style="color: #008000">/
<span style="color: #0000ff">public <span style="color: #0000ff">void<span style="color: #000000"> init(){
<span style="color: #008000">//<span style="color: #008000">增加健壮性
<span style="color: #0000ff">if(!fSrc.exists()||fSrc==<span style="color: #0000ff">null<span style="color: #000000">){
<span style="color: #0000ff">return<span style="color: #000000">;
}
<span style="color: #0000ff">if(<span style="color: #0000ff">this.blockSize><span style="color: #000000">fSrc.length()){
<span style="color: #0000ff">this.blockSize=(<span style="color: #0000ff">int<span style="color: #000000">) fSrc.length();
}
<span style="color: #0000ff">this.size=(<span style="color: #0000ff">int<span style="color: #000000">) fSrc.length();
<span style="color: #0000ff">this.blockNumber=(<span style="color: #0000ff">int) Math.ceil(size1.0/<span style="color: #000000">blockSize);
initList();
}
<span style="color: #008000">/*<span style="color: #008000">
- 初始化List
<span style="color: #008000">*/
<span style="color: #0000ff">public <span style="color: #0000ff">void<span style="color: #000000"> initList(){
String pathName=<span style="color: #000000">fSrc.getName();
<span style="color: #0000ff">for(<span style="color: #0000ff">int i=0;i<<span style="color: #0000ff">this.blockNumber;i++<span style="color: #000000">){
list.add(fDest.getAbsolutePath()+"/"+pathName+".part"+<span style="color: #000000">i);
}
}
<span style="color: #008000">/*<span style="color: #008000">
-
分割split
-
<span style="color: #808080">@throws<span style="color: #008000"> IOException
<span style="color: #008000">*/
<span style="color: #0000ff">public <span style="color: #0000ff">void split() <span style="color: #0000ff">throws<span style="color: #000000"> IOException{
<span style="color: #0000ff">long beginPos=0<span style="color: #000000">;
<span style="color: #0000ff">for(<span style="color: #0000ff">int i=0;i<<span style="color: #0000ff">this.blockNumber;i++<span style="color: #000000">){
splitDetail(i,beginPos,<span style="color: #0000ff">this<span style="color: #000000">.blockSize);
}
}
<span style="color: #008000">//<span style="color: #008000">详细切割步骤
<span style="color: #0000ff">private <span style="color: #0000ff">void splitDetail(<span style="color: #0000ff">int i,<span style="color: #0000ff">long beginPos,<span style="color: #0000ff">int blockSize) <span style="color: #0000ff">throws<span style="color: #000000"> IOException {
<span style="color: #008000">//<span style="color: #008000">创建流
RandomAccessFile raf=<span style="color: #0000ff">new RandomAccessFile (fSrc,"r"<span style="color: #000000">);
BufferedOutputStream bos=<span style="color: #0000ff">new BufferedOutputStream(<span style="color: #0000ff">new FileOutputStream(<span style="color: #0000ff">new File(<span style="color: #0000ff">this<span style="color: #000000">.list.get(i))));
<span style="color: #008000">//<span style="color: #008000">文件操作
<span style="color: #0000ff">byte []b=<span style="color: #0000ff">new <span style="color: #0000ff">byte[1024<span style="color: #000000">];
<span style="color: #0000ff">int len=0<span style="color: #000000">;
raf.seek(beginPos);
<span style="color: #0000ff">while(-1!=(len=<span style="color: #000000">raf.read(b))){
<span style="color: #0000ff">if(blockSize><span style="color: #000000">len){
bos.write(b,0<span style="color: #000000">,len);
blockSize-=<span style="color: #000000">len;
}<span style="color: #0000ff">else<span style="color: #000000">{
bos.write(b,blockSize);
}
bos.flush();
}
<span style="color: #008000">//<span style="color: #008000">释放流
<span style="color: #000000"> bos.close();
raf.close();
}
}
2.文件合并主要代码(可以与切割代码放到一起使用)
fileMerge() ( i=0;i MergeDetail( i,String fileName)
BufferedInputStream bis= BufferedInputStream( FileInputStream(= BufferedOutputStream( FileOutputStream( File("D://destdir//HugeCHM.rar"),1024<span style="color: #008000">//<span style="color: #008000">文件操作
<span style="color: #0000ff">int len=0<span style="color: #000000">;
<span style="color: #0000ff">byte []b=<span style="color: #0000ff">new <span style="color: #0000ff">byte[1024<span style="color: #000000">];
<span style="color: #0000ff">while(-1!=(len=<span style="color: #000000">bis.read(b))){
raf.write(b);
}
raf.close();
bis.close();
}
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!