日期:2014-05-20  浏览次数:20702 次

这段代码有三个错误,请问怎么改就正确了?
编写一个程序,将一个目录及其子目录下的所有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是可变的字符串,你在方法里面改变了,方法调用完之后,外面的也会改变
------解决方案--------------------