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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谭荣强 高级黑马   /  2014-4-27 21:25  /  1019 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

可以打印出所有的文件,但是.txt文件中只有几个,少了很多。
package day20;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;

public class Test2 {

        /**练习:列出D盘下的所有文件的名称。文件夹中还有文件夹,则继续在遍历,如果还是文件夹....,直到是文件。
         *
         *递归:函数自身调用自身
         *
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                File f = new File("d:\\book");
                 getDfiles(f);               
        }
       
        public static void getDfiles(File f){
        //目的,纯文本。硬盘,高效
                FileWriter fr = null;
                try {
                        //判断文件
                        File ioFilename = new File("d:\\文件名集合.txt");
                        if(!ioFilename.exists()){
                                ioFilename.createNewFile();
                        }
                        //创建流
                        fr= new FileWriter(ioFilename);
                        BufferedWriter br = new BufferedWriter(fr);
                        //列出文件名
                        File[] filenames  =f.listFiles();
                        for(File name:filenames){
                                //递归
                                if(name.isDirectory()){                                 
                                         getDfiles(name);               
                                }
                                else{                                       
                                        br.write(name.toString());//                                 
                                        br.newLine();
                                        br.flush();                                         
                                        System.out.println("abs..."+name.getAbsolutePath());//绝对路径。
                                }                               
                        }
                } catch (IOException e) {
                        // TODO Auto-generated catch block                                  
                                e.printStackTrace();                                                  
                }
                finally{
                        if(fr!=null){
                                try {
                                        fr.close();
                                } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                        System.out.println("流关闭失败");
                                }
                        }
                }
               
        }
}

3 个回复

倒序浏览
我以前写了个便利文件夹所有得MP3文件并将文件打印在txt文本中,你给参考代码吧:
  1. /*
  2.         创建文件列表。
  3.         将某目录下的所有MP3文件的绝对路径写到一个txt文本中。
  4. */
  5. import java.io.*;
  6. import java.util.*;

  7. class Mp3FileList
  8. {
  9.         public static void main(String[] args)
  10.         {
  11.                 File dir=new File("e:\\bsaketball\\音乐");
  12.                 List<File> list=new ArrayList<File>();
  13.                 fileToList(dir,list);
  14.                 System.out.println(list.size());
  15.                 File mp3=new File(dir,"mp3.txt");
  16.                 writeToFile(list,mp3.toString());
  17.        
  18.        
  19.         }
  20.         public static void writeToFile(List<File> list,String mp3FileList)
  21.         {
  22.                 BufferedWriter bufw=null;
  23.                 try
  24.                 {
  25.                         bufw=new BufferedWriter(new FileWriter(mp3FileList));
  26.                         for(File f:list)
  27.                         {
  28.                                 bufw.write(f.getAbsolutePath());
  29.                                 bufw.newLine();
  30.                                 bufw.flush();
  31.                        
  32.                         }
  33.                 }
  34.                 catch (IOException e)
  35.                 {
  36.                         throw new RuntimeException("nono");
  37.                 }
  38.                 finally
  39.                 {
  40.                         try
  41.                         {
  42.                                 if(bufw!=null)
  43.                                         bufw.close();
  44.                         }
  45.                         catch (IOException e)
  46.                         {

  47.                         throw new RuntimeException("nono");

  48.                         }


  49.                
  50.                 }
  51.        
  52.         }
  53.         public static void fileToList(File dir,List<File> list)
  54.         {
  55.                 File[] files=dir.listFiles();

  56.                 for(File file:files)
  57.                 {
  58.                         if(file.isDirectory())
  59.                                 fileToList(file,list);
  60.                         else
  61.                         {
  62.                                 if(file.getName().endsWith(".mp3"))
  63.                                         list.add(file);
  64.                        
  65.                         }
  66.                
  67.                 }
  68.        
  69.         }
  70. }
复制代码
回复 使用道具 举报
展展 发表于 2014-4-27 21:38
我以前写了个便利文件夹所有得MP3文件并将文件打印在txt文本中,你给参考代码吧:
...

直到哪错了 谢了
回复 使用道具 举报
你每递归一次就创建一个新的写入流,难道你没发现吗,所以打印的信息是对的,但是输出是错的,因为你后面的一直在覆盖前面的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马