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(" ".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+顺序数字依次往下排