首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

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

2012-07-31 
这段代码有三个错误,请问怎么改就正确了?编写一个程序,将一个目录及其子目录下的所有txt类型的文本文件中

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


Java code
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);    }}
[解决办法]
探讨

各位,我用JCreator和JDK1.40编译,通不过,你们那里能通过?

热点排行