此处创建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+顺序数字依次往下排