读书人

关于张孝祥老师的一道习题,该怎么处理

发布时间: 2012-04-03 12:38:19 作者: rapoo

关于张孝祥老师的一道习题
编写一个程序,讲一个目录及其子目录下的所有txt类型的文本文件中的内容合并到若干个新的文本文件中,当第一个新产生的文件中存储的内容达到1M bytes时,剩下的内容存储到第二个新的文件中,依次往下,新产生的文本文件名依次为1.txt,2.txt。。。
我刚开始通过张孝祥老师的视频学习java,现在遇到了这道题目,感觉有几处困难,一个是我不能找到目录下的所有的txt文件,我试着这样找,还是找不到:D:\\ff\\*\\*.txt。二是我只能打印出一次1.txt,再往下就没法了。希望有人指点一下,谢谢了。下面是我的代码,我希望通过简单的for循环多打印几次*.txt,还是不行

import java.io.*;


public class Txt1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
File f1=new File("D:\\dfd\\231.txt");
FileInputStream fis=null;
int count =1;
File f2=new File ("D:\\cc\\"+count+".txt");
FileOutputStream fos=null;
try {
fos =new FileOutputStream (f2);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
fis= new FileInputStream(f1);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("Text is not found");
}
byte [] b1=new byte [1024];
for (int i=0;i<5;i++)
{
try {
fis.read(b1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
fos.write(b1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
b1="0".getBytes();
}
}

}

[解决办法]
代码给上。按照1兆分割,用记事本太大了,我就按1KB分割的

Java code
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.util.ArrayList;import java.util.List;public class Test1{    static File file = new File("D:\\11");    static List<File> lists = new ArrayList<File>();// 存储所有.txt文件的绝对路径    /**     * 将所有文件合并到同一个文件当中     *      * @throws Exception     */    public static void uniteFile() throws Exception    {        File newFile = new File("D:\\11\\final.txt");        FileReader fr;        FileWriter fw = new FileWriter(newFile, true);        ;        BufferedReader bufr = null;        BufferedWriter bufw = new BufferedWriter(fw);        for (File file : lists)        {            fr = new FileReader(file);            bufr = new BufferedReader(fr);            String len = bufr.readLine();            while (null != len)            {                bufw.write(len);                bufw.flush();                len = bufr.readLine();            }        }        bufw.close();        bufr.close();    }    /**     * 将文件按照1KB分割     *      * @param f     * @throws Exception     */    public static void divideFile() throws Exception    {        FileInputStream fis = new FileInputStream("D:\\11\\final.txt");        FileOutputStream fos = null;        byte[] b = new byte[1024];        for (int i = 1;; i++)        {            if (fis.read(b) == -1)            {                break;            }            int length = fis.read(b);            File smallfile = new File("D:\\11\\22\\33\\" + i + ".txt");            fos = new FileOutputStream(smallfile);            fos.write(b);            System.out.println("写入文件" + i + "成功!");        }        fos.close();        fis.close();    }    public static void seekTxt(File f)    {        File[] files = f.listFiles();        for (File file : files)        {            if (file.isDirectory())            {                seekTxt(file);            }            else            {                if (file.getName().split("\\.")[1].equals("txt"))                {                    lists.add(file);                }            }        }    }    public static void main(String[] args) throws Exception    {        seekTxt(file);        uniteFile();        divideFile();    }} 


[解决办法]
楼主,你好,下面是我写的代码:
先合并指定目录和子目录下面的所有txt文档:

Java code
package csdn;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FilenameFilter;import java.io.IOException;import java.util.ArrayList;public class MyCombination {    public String combinate(String dir) {        ArrayList<String> list=new ArrayList<String>();        list=listTxts(dir, list);        FileOutputStream fos = null;        FileInputStream fis = null;        byte[] b = new byte[1024];        int c;        String tempFilePath = "D:/temp.txt";        try {            fos = new FileOutputStream(tempFilePath, true);            for (int i = 0; i < list.size(); i++) {                fis = new FileInputStream(new File(list.get(i)));                while ((c = fis.read(b)) != -1) {                    fos.write(b, 0, c);                }            }        } catch (Exception e) {            e.printStackTrace();        }        finally{            try {                if(fos!=null){                    fos.close();                }                if(fis!=null){                    fis.close();                }            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }        return tempFilePath;    }    public  ArrayList<String> listTxts(String directory,ArrayList<String>list){        try{            File file=new File(directory);            TxtFilter filter=new TxtFilter();            String[]imgs=file.list(filter);            if(imgs!=null&&imgs.length>0){                for(int i=imgs.length-1;i>=0;i--){                    list.add(directory+"/"+imgs[i]);                }            }            File[]temp_file=file.listFiles();            for(int i=0;i<temp_file.length;i++){                if(temp_file[i].isDirectory()){                    listTxts(temp_file[i].getAbsolutePath(),list);                }            }            imgs=null;            filter=null;            file=null;        }catch(Exception e){            e.printStackTrace();        }        return list;    }    class TxtFilter implements FilenameFilter {        private static final String mAcceptFormats = "txt";        @Override        public boolean accept(File dir, String name) {            // TODO Auto-generated method stub            boolean acc = false;            try {                name = name.toLowerCase();                // return true if it's the suffix of the filename, false                // otherwise                // if match any one,break the loop                acc = name.endsWith(mAcceptFormats);            } catch (NullPointerException e) {                // TODO Auto-generated catch block            }            return acc;        }    }} 

读书人网 >J2SE开发

热点推荐