黑马程序员技术交流社区

标题: 求解一道IO相关的实例 [打印本页]

作者: 戴振良    时间: 2012-4-8 14:29
标题: 求解一道IO相关的实例
看完张孝详的io视频,在后面最后一个视频有这么一个题目:

编写一个程序,将一个目录及其子目录下的所有txt类型的文本文件中的内容合并到若干个新的文本文件中,当第一个新产生的文件中存储的内容达到1K时,剩下的内容存储到第二个新的文件中,依次往下,新产生的文本文件名依次为1.txt、2.txt、……。

本来上面写的内容是要达到1M的,我在记事本写了一下,写几百K后保存我的机子就很卡了,于是改小一点,改成了1K,目录结构与文本文件在这附件 Test1.rar (598 Bytes, 下载次数: 154) ],欢迎大家下载做这个题,这样资源比较统一,一看这题目我就看不到思路,希望大家懂的把思路说一下,给个源码也行。在此谢过大家了!{:soso__3665524191284712448_2:}
作者: 戴振良    时间: 2012-4-10 00:05
没有一个人回答,{:soso__15674501862584447789_3:}啊!!
作者: dzl    时间: 2012-4-11 07:41
我也不懂
作者: 袁计艳    时间: 2012-4-11 15:05
你好 这个我写了个不知道 行不行 我把源码贴给你:
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);
        }
}
作者: 袁计艳    时间: 2012-4-11 15:07
在使用你附件的时候 出现了个问题就是 文件内容有点大 把子目录中的文件数据写短一点 不然里面 的 StringBuffer 长度会有问题
作者: 戴振良    时间: 2012-4-15 09:41
本帖最后由 戴振良 于 2012-4-15 19:48 编辑
袁计艳 发表于 2012-4-11 15:07
在使用你附件的时候 出现了个问题就是 文件内容有点大 把子目录中的文件数据写短一点 不然里面 的 StringBu ...


没注意看到回复,这么久了才回复您,真是不好意思!{:soso__8961432591078930798_3:}
作者: 戴振良    时间: 2012-4-15 19:15
本帖最后由 戴振良 于 2012-4-16 06:30 编辑

通过,你的代码挺少的又简洁,高手呀!!!我以前写了好久都没写出来,谢了!
作者: 戴振良    时间: 2012-4-15 19:26
       这帖子以前在第八届贴了好久都没有一个人回答,这是我复制到9期里的,没想到终于有人给解了。她的解答已经过了4天了,领导们可能也和我一样没注意看,所以特此置顶,不给我加技术分无所谓,希望领导们一定要给MM个技术分.
     强烈建议没做过这道题的黑马朋友们都自自己动手做一下这道题,如果做不出来再来看看楼上的回答,您一定会有收获的。因为我这觉得这道题挺难的(也可能是我笨吧)。

作者: 张卯    时间: 2012-4-16 01:29
看了代码,确实很不错,还很规范呢,真的是MM吗?鸭梨山大啊~哈哈~
作者: 袁计艳    时间: 2012-4-16 07:58
谢谢各位的抬举,其实毕老师视频里有类似的题,还需要自己拓展下,这个题正赶上我学习流,也花半天时间查资料做出来的。我也是零基础学习,好多知识还要向各位学习啊。
作者: 戴振良    时间: 2012-4-16 08:29
袁计艳 发表于 2012-4-16 07:58
谢谢各位的抬举,其实毕老师视频里有类似的题,还需要自己拓展下,这个题正赶上我学习流,也花半天时间查资 ...

零基础能把这题做的这么好,天才呀!嫉妒羡慕恨呀!!
作者: pray    时间: 2014-4-26 05:42
让网络上纷纷冒出该帖的真人版卡通版搞笑版成人版的好帖  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2