大文件的写入与分割


//大文件的写入
public class LargeMappedFiles extends File{

public LargeMappedFiles(String pathname) {
super(pathname);
// TODO Auto-generated constructor stub
}
//写入大数据文件
public void writeData(String pathName,long num) throws IOException{
pathName=pathName+"\\bigdata.txt";
FileWriter fWriter=new FileWriter(pathName);
BufferedWriter bWriter=new BufferedWriter(fWriter);
for (int i = 0; i < num; i++) {
bWriter.write(new Random().nextInt(Integer.MAX_VALUE)+"\r\n");
}
bWriter.close();
}
//分割大数据文件
//分割大数据文件
public void dividFile(String pathName,String divideName,int count) throws IOException{
pathName=pathName+"\\bigdata.txt";
FileWriter fileWriter=null;
BufferedWriter bufferedWriter=null;
FileReader fileReader=new FileReader(pathName);
BufferedReader bufferedReader=new BufferedReader(fileReader);
LinkedList writeList=new LinkedList();
LinkedList bwlist=new LinkedList();
int j=0;
for (int i = 0; i < count; i++) {
fileWriter=new FileWriter(divideName+"\\"+i+".txt",false);
bufferedWriter=new BufferedWriter(fileWriter);
writeList.add(fileWriter);
bwlist.add(bufferedWriter);
}
while(bufferedReader.ready()){
int num=1;
for (Iterator iterator = bwlist.iterator(); iterator.hasNext();) {
BufferedWriter type = (BufferedWriter) iterator.next();
if(j==num)//判断轮到第几个文件流写入数据了
{
//写入数据,跳出,进行下一个文件流,下一个数据的写入
type.write(bufferedReader.readLine() + "\r\n");
break;
}
num++;
}
//判断是否到了最后一个文件流了
if (j >= count) {
j = 1;
} else
j++;
}
bufferedReader.close();
fileReader.close();
for (Iterator iterator = bwlist.iterator(); iterator.hasNext();) {
BufferedWriter object = (BufferedWriter) iterator.next();
object.close();
}
//遍历关闭所有子文件流
for (Iterator iterator = writeList.iterator(); iterator.hasNext();) {
FileWriter object = (FileWriter) iterator.next();
object.close();
}
}
}
public class Test {

/**
* @param args
*
*
*/
public static void main(String[] args) {


//小提醒:系统只能自动创建文件不能创建文件夹
//大数据文件
String pathName="D:\\123";
LargeMappedFiles lmf=new LargeMappedFiles(pathName);
//存入大数据
try {
/*
* 此处也可以改为
* lmf.writeData(pathName, 10000000);
*/
lmf.writeData(pathName, 1000000000000000000000L);
} catch (IOException e) {
e.printStackTrace();
}
//切割文件
String divideName = "D:"+"\\123";
lmf.dividFile(pathName, divideName,4);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值