日期:2014-05-20  浏览次数:20762 次

关于张孝祥老师的一道习题
编写一个程序,讲一个目录及其子目录下的所有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();

    }

}