这段代码有三个错误,请问怎么改就正确了?
编写一个程序,将一个目录及其子目录下的所有txt类型的文本文件中的内容合并到若干个新的文本文件中,当第一个新产生的文件中存储的内容达到1Mbytes时,剩下的内容存储到第二个文件中,依次往下,新产生的文本文件名依次为1.txt、2.txt、……。
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); }}
package a;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; int cnt = 0; int totleCnt = 1024 * 1024; // 1M File file = null; //1、在 try外面定义 FileOutputStream fos = null; try { while ((len = bais.read(newbytes)) != -1) { if (cnt == 0) { //刚开始读取 或者刚读完1M的时候需要重新new一个file 和fos ,写入 file = new File("d:\\java\\" + i + ".txt"); fos = new FileOutputStream(file, true); //2、以追加的模式 } fos.write(newbytes, 0, len); cnt += len; if (cnt == totleCnt) { cnt = 0 ; i++; fos.flush() ; //3 、写完1M,应该把 fos flush() ,然后关闭 ; fos.close() ; } } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { String path = "d:\\Java\\Test1"; File file = new File(path); // 要得到的数据集合(初始) StringBuffer sbTemp = new StringBuffer(); sbTemp = new IoTest().fileDoc(file, sbTemp); saveDataForTxt(sbTemp); }}
[解决办法]