RandomAccessFile实现文件分割、合并

简介: RandomAccessFile实现文件分割、合并

RandomAccessFile可使用的操作模式:

“rwd”模式可用于减少执行的“I/O”操作数量。使用“rwd”仅要求更新要写入存储的文件的内容;使用“rws”要求更新要写入的文件内容与元数据


1.文件分割

/*
* @param fileName:源文件;
* @param filterFolder:分割后文件所在的目录;
* @param size:分割文件大小,以KB为单位;
*/
public void cut(String fileName,String filterFolder,int size) throw Exception{
    size = size*1024;
    int maxx = 0;
    //如果输出目录不存在则创建
    File outFolder = new File(fileterFolder);
    if(!outFolder.exists()){
        outFolder.mkdirs();
    }
    File inFile = new File(fileName);
    int fileLength = (int) inFile.length();//取得文件大小
    int value;//取得文件要分割的个数
    RandomAccessFile inRAF = new RandomAccessFile(inFile,"r");//打开要被分割的文件
    value = fileLength/size;
    int i = 0;
    int j = 0;
    for(;j<value;j++){
        File outFile = new File(filterFolder+File.separator+inFile.getName()+j+"tmp");
        RamdomAccessFile outRAF = new RandomAccessFile(outFile,"rw");
        maxx +=size;
        for(;i<maxx;i++){
            outRAF.write(inRAF.read());
        }
        outRAF.close();
    }
    /*将最后不足 size 的字节内容输出*/
    File outFile = new File(filterFolder+File.separator+inFile.getName()+j+"tmp");
    RamdomAccessFile outRAF = new RandomAccessFile(outFile,"rw");
    for(;i<fileLength;i++){
        outRAF.write(inRAF.read());
    }
    outRAF.close();
    inRAF.close();
}


2.文件合并

/*
* @param fileName:合并之后的文件;
* @param filterFolder:分割文件所在的目录;
* @param filterName:分割后的文件后缀
*/
public void unite(String fileName,String filterFolder,final String filterName) throws Exception{
    File[] tt;
    File inFile = new File(filterFolder);//在当前目录下的文件
    File outFile = new File(fileName);//取得输出名
    RandomAccessFile outRAF = new RandomAccessFile(outFile,"rw");
    /*
        FilenameFilter:文件名过滤器;
        boolean accept(File dir,String name);   
        //dir表示文件的当前目录,name表示文件名;
        //FilenameFilter用来把符合要求的文件或目录返回;
    */
    tt = inFile.listFiles(new FilenameFilter(){
        public boolean accept(File dir,String name){
            String rr = new File(name).toString();
            return rr.endsWith(filterName);
            //filterName 为final ,故方法内部的匿名类可以取得
        }
    });
    //打印取得的文件名
    for(int i = 0 ;i<tt.length;i++){
            System.out.println(tt[i]);
    }
    //打开所有的文件再写入一个文件里
    for(int i = 0;i<tt.length,i++){
        RandomAccessFile inRAF = new RandomAccessFile(tt[i],"r");
        int e;
        while((e=inRAF.read()! = -1)){
            outRAF.write(e);
        }
    }
    outRAF.close();
}


目录
相关文章
|
7月前
|
Go
文件写入、追加、读取、复制不是问题
文件写入、追加、读取、复制不是问题
74 0
|
7月前
|
C++
C++程序对数据文件的操作与文件流
C++程序对数据文件的操作与文件流
57 0
|
7月前
|
C++ iOS开发
61对数据文件的操作与文件流
61对数据文件的操作与文件流
38 0
|
7月前
合并文件信息
合并文件信息。
41 0
|
Unix
文件lseek操作产生空洞文件的方法
文件lseek操作产生空洞文件的方法
136 0
|
存储 移动开发 Java
JavaNIO实现按行读取文件操作
在Java编程中,文件操作常常是必不可少的步骤。在对文件进行操作时,按行读取文件是一个常见需求。Java提供了多种方法实现按行读取文件,其中一种方法是使用JavaNIO。
207 0
|
移动开发 缓存 Java
FileUtils分割读取txt文件
FileUtils分割读取txt文件
|
网络协议 测试技术 Go
带缓冲的 Reader 读文件 | 学习笔记
快速学习带缓冲的 Reader 读文件
带缓冲的 Reader 读文件 | 学习笔记