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();

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流烟默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值