编写一个程序,将一个目录及其子目录下的所有txt类型的文本文件中的内容合并到若干个新的文本文件中,当第一个新产生的文件中存储的内容达到1Mbytes时,剩下的内容存储到第二个文件中,依次往下,新产生的文本文件名依次为1.txt、2.txt、……。
- Java code
package test;import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;public class IoTest { public StringBuffer fileDoc(File path,StringBuffer sb){ //目录列表数组 File[] files = path.listFiles(); //字节流读取 FileInputStream fileInputStream = null; for(File file1 : files){ if(file1.isDirectory()){//如果是目录 //递归 fileDoc(file1,sb); }else{ try { fileInputStream = new FileInputStream(file1); int size = fileInputStream.available(); byte[] tempByte = new byte[size]; if(fileInputStream.read(tempByte) != size){ System.out.println("文件读取失败!!!"); }else{ //内容转换 String change = new String(tempByte,"utf-8"); sb.append(change); } } catch (Exception e) { e.printStackTrace(); } } } return sb; } //保存数据 public static void saveDataForTxt(StringBuffer sbStr){ //总数据 String allStr = sbStr.toString(); byte[] bytes = allStr.getBytes(); //将数据放到字节输入流中 ByteArrayInputStream bais = new ByteArrayInputStream(bytes); //1k的数据 byte[] newbytes = new byte[1024]; int len = 0; int i = 1; try { while((len = bais.read(newbytes)) != -1){ File file = new File("d:\\java\\"+i+".txt"); new FileOutputStream(file).write(newbytes,0,len); i++; } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { String path = "d:\\TDDownload\\Test1"; File file = new File(path); //要得到的数据集合(初始) StringBuffer sbTemp = new StringBuffer(); sbTemp = new IoTest().fileDoc(file,sbTemp); saveDataForTxt(sbTemp); }}
------解决方案--------------------
每个文件写1Mbytes的数据,然后再写第二个文件
byte[] newbytes = new byte[1024];
这条明显示是1K的数据,改成
byte[] newbytes = new byte[1024*1024];
输入输出流,用完要close掉。
------解决方案--------------------
为什么1k数据要存一个文件呢 是不是这里有问题 没有试
------解决方案--------------------
源代码没有问题的
只是这个方法fileDoc是没必要要返回值的,因为StringBuffer是可变的字符串,你在方法里面改变了,方法调用完之后,外面的也会改变
------解决方案--------------------