加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java_文件夹分割与合并

发布时间:2020-12-14 06:26:27 所属栏目:Java 来源:网络整理
导读:一.思路: 1.文件切割: 使用类RandomAccessFile,其中方法seek可以自定义读取位置,读一段,通过字节输出流(我使用BufferedOutputStream)写一段 2.文件合并 读取多个文件写入一个文件,读取使用字节输入流(BufferedInputStream),输出使用字节输出流就可以(Buffere

一.思路:

  1.文件切割:

    使用类RandomAccessFile,其中方法seek可以自定义读取位置,读一段,通过字节输出流(我使用BufferedOutputStream)写一段

  2.文件合并

    读取多个文件写入一个文件,读取使用字节输入流(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);

二.代码:

? ? ? ? 1.文件切割代码

<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(size
      1.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();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读