A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戴振良 黑马帝   /  2012-4-8 14:29  /  2626 人查看  /  11 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

看完张孝详的io视频,在后面最后一个视频有这么一个题目:

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

本来上面写的内容是要达到1M的,我在记事本写了一下,写几百K后保存我的机子就很卡了,于是改小一点,改成了1K,目录结构与文本文件在这附件 Test1.rar (598 Bytes, 下载次数: 162) ],欢迎大家下载做这个题,这样资源比较统一,一看这题目我就看不到思路,希望大家懂的把思路说一下,给个源码也行。在此谢过大家了!{:soso__3665524191284712448_2:}

评分

参与人数 2技术分 +1 黑马币 +10 收起 理由
岳民喜 + 1
dzl + 10 我也想解决这问题

查看全部评分

11 个回复

倒序浏览
没有一个人回答,{:soso__15674501862584447789_3:}啊!!
回复 使用道具 举报
我也不懂
回复 使用道具 举报
你好 这个我写了个不知道 行不行 我把源码贴给你:
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);
        }
}

评分

参与人数 2技术分 +2 黑马币 +20 收起 理由
岳民喜 + 2
戴振良 + 20 赞一个!

查看全部评分

回复 使用道具 举报
在使用你附件的时候 出现了个问题就是 文件内容有点大 把子目录中的文件数据写短一点 不然里面 的 StringBuffer 长度会有问题
回复 使用道具 举报
本帖最后由 戴振良 于 2012-4-15 19:48 编辑
袁计艳 发表于 2012-4-11 15:07
在使用你附件的时候 出现了个问题就是 文件内容有点大 把子目录中的文件数据写短一点 不然里面 的 StringBu ...


没注意看到回复,这么久了才回复您,真是不好意思!{:soso__8961432591078930798_3:}
回复 使用道具 举报
戴振良 黑马帝 2012-4-15 19:15:00
7#
本帖最后由 戴振良 于 2012-4-16 06:30 编辑

通过,你的代码挺少的又简洁,高手呀!!!我以前写了好久都没写出来,谢了!
回复 使用道具 举报
戴振良 黑马帝 2012-4-15 19:26:00
8#
       这帖子以前在第八届贴了好久都没有一个人回答,这是我复制到9期里的,没想到终于有人给解了。她的解答已经过了4天了,领导们可能也和我一样没注意看,所以特此置顶,不给我加技术分无所谓,希望领导们一定要给MM个技术分.
     强烈建议没做过这道题的黑马朋友们都自自己动手做一下这道题,如果做不出来再来看看楼上的回答,您一定会有收获的。因为我这觉得这道题挺难的(也可能是我笨吧)。
回复 使用道具 举报
张卯 中级黑马 2012-4-16 01:29:55
9#
看了代码,确实很不错,还很规范呢,真的是MM吗?鸭梨山大啊~哈哈~

点评

看名字,应该不会错吧,有个艳字的@!  发表于 2012-4-16 06:31
回复 使用道具 举报
谢谢各位的抬举,其实毕老师视频里有类似的题,还需要自己拓展下,这个题正赶上我学习流,也花半天时间查资料做出来的。我也是零基础学习,好多知识还要向各位学习啊。
回复 使用道具 举报
袁计艳 发表于 2012-4-16 07:58
谢谢各位的抬举,其实毕老师视频里有类似的题,还需要自己拓展下,这个题正赶上我学习流,也花半天时间查资 ...

零基础能把这题做的这么好,天才呀!嫉妒羡慕恨呀!!
回复 使用道具 举报
pray 高级黑马 2014-4-26 05:42:36
12#
让网络上纷纷冒出该帖的真人版卡通版搞笑版成人版的好帖  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马