Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 337|回复: 0

[JavaIO学习]文件分割与合并实例(java)

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-3 23:58:32 | 显示全部楼层 |阅读模式
    程序使用FileStream读取二进制流,实现大文件的分割与合并。

    程序1 ,实现文件的分割:

        关于程序的一些解释: 将要分割的文件“36.avi”放到workspace中;FileInputStream用于读取二进制流,这样可以保证读取任意格式的文件;prefix用于截取文件名的后缀,以便分割后生成的文件格式与源文件一致(最主要用于文件合并时合并后的文件格式);可以根据文件大小设置 fileDivi;skip()方法用于跳过指定的字节数,这样可以有效地在文件中定位;注意read()方法中的三个参数
    1. /**  
    2. * This program is used to devide large files  
    3. * @version 2012-3-8  
    4. * @author suqianqian  
    5. *   
    6. */
    7. import java.io.*;  
    8. public class DividedFile {  
    9.     public static void main(String[] args){  
    10.         try{  
    11.             readFile("36.avi");  
    12.         }catch(IOException e){}  
    13.     }  
    14.     public static void writeFile(byte[] buf,String fileDestination) throws IOException   
    15.     {   
    16.         FileOutputStream fos = new FileOutputStream(fileDestination,true);   
    17.         fos.write(buf);  
    18.         fos.close();  
    19.     }   
    20.     //读取文件  
    21.      public static void readFile(String fileSource) throws IOException{  
    22.          FileInputStream fis = new FileInputStream(fileSource);  
    23.          //获取后缀  
    24.          String prefix=fileSource.substring(fileSource.lastIndexOf(".")+1);  
    25.          //String extension = fileSource.substring(fileSource.lastIndexOf("/"),fileSource.indexOf("."));  
    26.          //String trueName = extension.replace("/", "");  
    27.          String trueName=fileSource.substring(0,fileSource.lastIndexOf("."));  
    28.          int fileDivi = 5632*200;  
    29.          System.out.println(trueName);  
    30.          //String trueName = "TextFile";   
    31.          //available()方法可以知道文件具体有多少个字节。   
    32.          int filelen = fis.available();  
    33.          fis.close();  
    34.          System.out.println(filelen);  
    35.          int fl = filelen / fileDivi;  
    36.          byte[][] buf = new byte[fl+1][fileDivi];  
    37.          for(int i = 0; i < fl; i++){  
    38.              //System.out.println(i+":"+buf[i]);  
    39.              FileInputStream fis2 = new FileInputStream(fileSource);  
    40.              fis2.skip(i*fileDivi);  
    41.              fis2.read(buf[i],0,fileDivi);  
    42.             //System.out.println("写入前"+i);  
    43.              if(i < 10){  
    44.                  writeFile(buf[i],"F:\java/"+trueName+"devided_00"+i+"."+prefix);  
    45.              }else
    46.                  if(i >= 10&&i < 100)  
    47.                      writeFile(buf[i],"F:\java/"+trueName+"devided_0"+i+"."+prefix);  
    48.                  else
    49.                      writeFile(buf[i],"F:\java/"+trueName+"devided_"+i+"."+prefix);  
    50.              //System.out.println("写入后"+i);  
    51.              fis2.close();  
    52.          }  
    53.          FileInputStream fis2 = new FileInputStream(fileSource);  
    54.          fis2.skip(fl*fileDivi);  
    55.          fis2.read(buf[fl],0,filelen%fileDivi);  
    56.          if(fl < 10){  
    57.              writeFile(buf[fl],"F:\java/"+trueName+"devided_00"+fl+"."+prefix);  
    58.          }else
    59.              if(fl >= 10&&fl < 100)  
    60.                  writeFile(buf[fl],"F:\java/"+trueName+"devided_0"+fl+"."+prefix);  
    61.              else
    62.                  writeFile(buf[fl],"F:\java/"+trueName+"devided_"+fl+"."+prefix);  
    63.          fis2.close();  
    64.         // writeFile(buf[fl],trueName+"devided_"+fl+"."+prefix);  
    65.         // fis.close();  
    66.      }
    67. }
    复制代码
    程序2用于将已分割的文件进行合并  解释:refreshFileList()方法用于遍历指定的目录中的所有文件。程序中readFile()方法也展示了如何返回两个值(当然此程序未用到,后来没改)
    1.     /**  
    2.      * This program is used to merge files  
    3.      * @version 2012-3-8  
    4.      * @author suqianqian  
    5.      *   
    6.      */
    7.     import java.io.*;   
    8.     import java.util.ArrayList;  
    9.         
    10.     public class MergedFile //字节流的读写文件简介     
    11.     {   
    12.         public static void main(String[] args) throws IOException   
    13.         {   
    14.             MergedFile fileStream = new MergedFile();  
    15.             fileStream.refreshFileList ("F:\java");   
    16.               
    17.         }   
    18.         //遍历目录获取所有需要合并的的文件  
    19.         private static ArrayList filelist = new ArrayList();  
    20.         public void refreshFileList(String strPath) {  
    21.             File dir = new File(strPath);  
    22.             File[] files = dir.listFiles();  
    23.             if (files == null) return;  
    24.             for (int i = 0; i< files.length;i++){   
    25.                 if (files[i].isDirectory()) {  
    26.                     refreshFileList(files[i].getAbsolutePath());  
    27.                 }  
    28.                 else{  
    29.                     String strFileName = files[i].getAbsolutePath().toLowerCase();  
    30.                     try{  
    31.                         //int fileNum = 0;  
    32.                         //fileNum++;  
    33.                         readFile(strFileName);  
    34.                         //prefix 截取文件后缀  
    35.                         String prefix=strFileName.substring(strFileName.lastIndexOf(".")+1);  
    36.                         writeFile(strFileName,"merged."+prefix);  
    37.                     }catch(IOException e){}  
    38.                     System.out.println("---"+strFileName);  
    39.                     filelist.add(files[i].getAbsolutePath());  
    40.                 }  
    41.             }  
    42.         }  
    43.         //写文件的方法     
    44.         public static void writeFile(String filesource,String fileDestination) throws IOException   
    45.         {   
    46.             FileOutputStream fos = new FileOutputStream(fileDestination,true);   
    47.             byte[] buf = readFile(filesource).buf;  
    48.             fos.write(buf);  
    49.             fos.close();   
    50.         }   
    51.         //使用FileInputStream中的available()方法读文件存入到buf中,并获取文件长度和buf   
    52.         public static class ReadFile{  
    53.             public ReadFile(byte[] b,int fl){  
    54.                 buf = b;  
    55.                 filelen = fl;  
    56.             }  
    57.             public byte[] getBuf(){  
    58.                 return buf;  
    59.             }  
    60.             public int getFileLen(){  
    61.                 return filelen;  
    62.             }  
    63.             private byte[] buf;  
    64.             private int filelen;  
    65.         }  
    66.         public static ReadFile readFile(String filesource) throws IOException   
    67.         {   
    68.             FileInputStream fis = new FileInputStream(filesource);  
    69.             //available()方法可以知道文件具体有多少个字节。   
    70.             int filelen = fis.available();  
    71.             byte[] buf = new byte[filelen];   
    72.             fis.read(buf);  
    73.             fis.close();  
    74.             return new ReadFile(buf,filelen);  
    75.         }  
    76.     }
    复制代码


       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/11/3/235832234.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-25 14:08 , Processed in 0.295175 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表