当前位置: 代码迷 >> J2SE >> 这段代码有三个异常,请教如何改就正确了
  详细解决方案

这段代码有三个异常,请教如何改就正确了

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