public static void main(String[] args) {
    File inf = new File("txtfile");//txtfile文件夹
    File ouf = null;
    FileOutputStream fos = null;
    FileInputStream fis = null;
    String[] flis = inf.list();
    byte[] b = new byte[1];
    int bLen = 0;
    int fnCount = 1;
    // 创建一个输出文件
    try {
ouf = new File(fnCount  + ".txt");
fos = new FileOutputStream(ouf,true);
    } catch (FileNotFoundException e) {
e.printStackTrace();
    }
    //循环查找文件并读取内容写入新文件
    for(int i=0;i<flis.length;i++){ 
         if(new File("txtfile\\" + flis[i]).isFile()){
              try {
   fis = new FileInputStream("txtfile\\" + flis[i]);
   bLen = fis.read(b);        
              } catch (FileNotFoundException e) {
e.printStackTrace();
       } catch (IOException e) {
e.printStackTrace();
     }
     while(bLen>0){
//向输出文件写入一个字节的内容
try {
    fos.write(b);
    fos.flush();
} catch (IOException e1) {
    e1.printStackTrace();
}
//如果输出文件大于1M,则新建一个输出文件
System.out.println(ouf.length());// 打印出文件长度.....
if(ouf.length()==1024){
    try {
fos.close();
    } catch (IOException e1) {
         e1.printStackTrace();
    }
    try {
        fnCount++ ;
        ouf = new File(fnCount + ".txt");
        fos = new FileOutputStream(ouf,true);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}
//从输入文件读取下一子节的内容
try {
    bLen = fis.read(b);
} catch (IOException e) {
    e.printStackTrace();

    }
         }
     }    
}
这是<张孝祥java就业培训>上的一个练习题,要求是将一个目录及其子目录里的所有文本文件的内容合并输出到一个文本文件里,文件超过1M时,输出到一个新的文件里.文件以1.txt,2.txt,3.txt,......命名.我在程序里没处理子文件夹,并把它改成超过1024字节时,就新建一个文件.测试结果是,只创建了一个1.txt文件,而且windows显示长度562k.将ouf.length()==1024改为ouf.length()>=1024,则创建了很多文本文件,而且windows显示每个文件的长度都不一样.有的5k,有的7k.......程序中
    System.out.println(ouf.length());// 打印出文件长度.....
测试结果,打印的却全是0.不知问题所在,请高手指点.

解决方案 »

  1.   

    youthon(小山) ,这段就是向新文件里写数据啊. //向输出文件写入一个字节的内容
    try {
        fos.write(b);
        fos.flush();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
      

  2.   

    try {                                        //1
            fnCount++ ;                          //2
            ouf = new File(fnCount + ".txt");    //3
            fos = new FileOutputStream(ouf,true);//4
    }                                            //5
    catch (FileNotFoundException e) {            //6
            e.printStackTrace();                 //7
    }                                            //8
     在上面第3行代码里fnCount + ".txt"这个String对象代表某个不存在的文件名,又因为第3行创建一个file对象时他的参数不是null所以在compile时不会报错,所以在第3行后加上
         if(!ouf.exists()){
             ouf.createNewFile();
         }
    不然的话,就会出现只有一个文件即 1.txt 这个文件。