我生成一个大的csv文件(大约500 MB),我需要将该文件分割成多个文件,每个文件最多为10 Mb。 我发现很多类似的帖子,但他们中的任何一个都回答我的问题,因为在所有帖子中,java代码将原始文件分割成10个Mb文件,并且(显然)截断了记录。 相反,我需要每个记录完整,完整。 任何记录都应该被截断。 如果我从原始的大csv文件复制到一个生成的文件的记录,并且文件维度将溢出10 Mb如果我复制记录,我应该能够不复制该记录,关闭该文件,创建一个新的将文件复制到新文件中。 这可能吗? 有人可以帮我吗? 谢谢!如何在一个Java项目中将csv文件拆分成多个文件,大小为
我试过这段代码:
File f = new File("/home/luca/Desktop/test/images.csv");
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
FileOutputStream out;
String name = f.getName();
int partCounter = 1;
int sizeOfFiles = 10 * 1024 * 1024;// 1MB
byte[] buffer = new byte[sizeOfFiles];
int tmp = 0;
while ((tmp = bis.read(buffer)) > 0) {
File newFile=new File("/home/luca/Desktop/test/"+name+"."+String.format("%03d", partCounter++));
newFile.createNewFile();
out = new FileOutputStream(newFile);
out.write(buffer,0,tmp);
out.close();
}
但显然是行不通的。 此代码将n个10Mb文件中的源文件分割为记录。 在我的情况下,我的csv文件有16列,所以上面的程序我有例如最后一个记录只有5列填充。其他人被截断。
解决方案 这里我写的代码。
FileReader fileReader = new FileReader("/home/luca/Desktop/test/images.csv");
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line="";
int fileSize = 0;
BufferedWriter fos = new BufferedWriter(new FileWriter("/home/luca/Desktop/test/images_"+new Date().getTime()+".csv",true));
while((line = bufferedReader.readLine()) != null) {
if(fileSize + line.getBytes().length > 9.5 * 1024 * 1024){
fos.flush();
fos.close();
fos = new BufferedWriter(new FileWriter("/home/luca/Desktop/test/images_"+new Date().getTime()+".csv",true));
fos.write(line+"\n");
fileSize = line.getBytes().length;
}else{
fos.write(line+"\n");
fileSize += line.getBytes().length;
}
}
fos.flush();
fos.close();
bufferedReader.close();
此代码读取CSV文件并将其拆分为n档,每档最多为10 MB大,每个CSV行完全复制或不可复制的。
你到目前为止尝试过哪些代码?如果你只是想让别人为你编写程序,你需要聘请一名程序员。 – nhgrif
它是自由职业者的良好SPEC。 –
没有理由回答这么粗鲁,我不是自由职业者。 – lucavenanzetti