Java文件拆分

需求:

有一个文件,对文件拆分,按照256的char进行拆分,允许超出10%溢出范围
例如:一个文件516char,理论说拆分3个 1个256 1个256 1个4
最后一个会造成资源的,最后剩余的在256的10%的范围内,写入到前一个文件中

思路:

对于字符溢出 256*10%=26;256+26=282;设置字节数组大小为282,对读取满和读取不满另作分析;

public static void main(String[] args) throws Exception{
        InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\IdeaFile\\BigData\\data\\Test.txt"));
        //给定数组大小,每读一次存储一个小文件
        // 256  256+256*10%=282
        // 大小给上282,方便与读取判断是否在溢出的10%的范围内
        int flag=0;//标记切分文件的个数
        int index=0;//用于获取线标,方便元素前移和读取数据
        int len=282;//控制第一次读取的长度为282;
        OutputStreamWriter osw = null;
        char[] chars=new char[282];
int i;
while((i=isr.read(chars,index,len))!=-1){
//选择每次读取282个字符,但是不全部写入
if(i==282||i=256){
    osw=new OutputStreamWriter(
        new FileOutputStream("E:\\IdeaFile\\BigData\\slipt\\part-" + flag));
         osw.write(new String(chars,0,256));
        //会多余出来26个字符 在下一次读取时候会存储到下一个文件中
//对元素进行偏移
        index=0;
        for(int j=256;j<=281;j++){
        chars[index]=chars[j];
        index++;
        }
osw.close;
} else{
//若读取不满256和282,则有两种可能
//1.加上26也没有溢出直接存储,满足需求
//2.加上26溢出了,但是没有超过282,同样满足需求 
i=i+26;
osw=new OutputStreamWriter(
          new FileOutputStream("E:\\IdeaFile\\BigData\\slipt\\part-" + flag));
       osw.write(new String(chars,0,i));
       osw.close();
}
flag++;
}
isr.read();
isr.close();
}
}










 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值