在写入文件和创建新文件时检查文件大小

尝试编写java代码来编写“.dat”文件..同时拧紧检查大小..每200 KB创建新的“.dat”继续写文件。 有什么方法可以做到这一点..

当文件超过200KB并创建这样的新文件名

第一个文件名.. 1_filename第二个文件名.. 2_filename第三个文件名.. 3_filename ……..

或者如果文件只创建一个文件意味着小于200KB

Filenamd ..文件名,如代码..

请帮我..

我写代码写文件,但..它只写2个文件..这是不正确的方式来做..请帮助我..

这是我的代码..

import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; public class xmlfile1filebytes { public static void main(String[] args) throws IOException { File folder = new File ("07072013"); File[] listOfFiles = folder.listFiles(); System.out.println("There are " + listOfFiles.length + " files"); String filesin; String timeStamp = new SimpleDateFormat("MM-dd-yyyy[HH.mm.ss]") .format(Calendar.getInstance().getTime()); System.out.println(timeStamp); BufferedWriter xmlfile = null; BufferedWriter datfile = null; String outxmlfile = ("07072013\\" + timeStamp + ".xml"); xmlfile = new BufferedWriter(new FileWriter(outxmlfile)); String outdatfile = ("07072013\\" + timeStamp + ".dat"); datfile = new BufferedWriter(new FileWriter(outdatfile)); int offset = 0; int size = 0; for (int i = 0; i = 200) { datfile.close(); BufferedWriter datfile1 = null; String outdatfile1 = ("07072013\\" + "1_"+ timeStamp + ".dat"); datfile1 = new BufferedWriter(new FileWriter(outdatfile1)); String s1 = new String(actualBytes); datfile1.append(s1); datfile1.close(); } } } } xmlfile.close(); } } 

写文件超过400 KB时出错。

错误:

 There are 10 files 07-09-2013[16.03.00] 1192970_eBill_20130709.pdf 96 1321470_eBill_20130709.pdf 208 1724897_eBill_20130709.pdf Exception in thread "main" java.io.IOException: Stream closed at java.io.BufferedWriter.ensureOpen(Unknown Source) at java.io.BufferedWriter.write(Unknown Source) at java.io.Writer.write(Unknown Source) at java.io.Writer.append(Unknown Source) at xmlfile1filebytes.main(xmlfile1filebytes.java:65) 

请帮我!! 提前致谢!! 谢谢!!

我建议你创建一个单独的类,其唯一的工作是创建文件(按顺序),将数据写入文件,密切关注大小,并根据需要关闭/打开文件。 这将使您的代码更有条理 – 您将能够更清楚地看到您的错误。 该类将具有以下方法:

 setMax(maxVal) - set the maximum file size (default 400k) setRoot(rootPath) - folder where files will be created setName(rootName) - "format string" used to generate file names (eg "myFile%03d.dat") writeData(dataSize, dataBlock) - write data. If no file open, open it. If file too big, split it. closeFile() - flush buffers, close the last file. Could be part of the destructor currentFile() - returns name of current file (for debug) currentSize() - returns current file size (for debug) 

如果你能弄清楚如何编写这个类,你将解决你的初始问题,并有一些你可以同时重复使用的东西。

如果您希望(大部分)保留您已有的代码结构,那么您的修复就是删除当前行85。

  83: String s1 = new String(actualBytes); 84: datfile1.append(s1); 85: datfile1.close(); <<<<<<<<<<< remove this line 86: } 

关闭文件后,下次尝试写入文件将失败 - 这就是您看到的错误。

从Java 8(或Java 7)开始,有一种更好的方法来检查文件大小(并采取相应的措施)
if(Files.size(Paths.get(csvFile.toURI())) > 3000000 ){ // Create a new file at same path and use from next time - if current file is greater than X MB }