java拆分数据循环创建一定字节大小的文件

此处创建10240字节大小的文件,也就是10kB大小的一个文件,一个文件内容写到10kB,下一个文件接着上次的内容继续写,保证内容不漏掉  调用splitFile(String str)  一直传要写的数据即可

public class Test {
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
    int i = 2;
    RandomAccessFile out_r;
    private File file = new File("d:\\data\\"+formatter.format(new Date())+"part1.txt");


    {
        try {
            out_r = new RandomAccessFile(file, "rw");
            out_r.seek(out_r.length()); // 设置从该文件末尾开始写入
        } catch (FileNotFoundException e){
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //拆分数据循环创建50字节大小的文件
    public void splitFile(String str) throws IOException {
        byte[] byte2 = str.getBytes(); // 解决乱码问题
        long len = str.length();
      /*    如果输入的数据与目标文件的大小和大于10240,且目标文件大小大于10240 就创建新文件
      若目标文件大小小于10240,就写入10240-out_r.length()长度的数据
                * 1MB等于1048576字节。*/

        if (len + out_r.length() >=10240) {//文件不够写入一条数据
            if (out_r.length() >= 10240) {
                createFile(file);  //创建文件方法
                i++;
                splitFile(str);
            } else { //文件可以写入一条数据的一部分
                long buff = 10240 - out_r.length();
                //  out.seek(out_r.length());
                out_r.seek(out_r.length());
                out_r.write(byte2, 0, (int) buff);
                if ((len - buff) > 0) {
                    str = str.substring((int) buff);
                    splitFile(str);  //用递归
                }
            }
        } else {//文件足够写入一条数据
            out_r.write(byte2);
            out_r.write("\r\n".getBytes());
            return;
        }
    }
    public void createFile(File file) throws IOException {
        Date date = new Date(); // 获取当前时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 定义文件名格式
        String str1 = file.getParent() + "\\";;
        String format = formatter.format(new Date());
        String fileName = format + "part" + i;
        String path = str1  + fileName + ".txt";
        out_r = new RandomAccessFile(path,"rw");
    }
}
以下是生成的文件 文件名是八位日期+part+顺序数字依次往下排

java拆分数据循环创建一定字节大小的文件_第1张图片

 
 

你可能感兴趣的:(java数据结构和算法,java,开发语言,后端)