Java读取文件夹下的文件并进行处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013963380/article/details/78531392

Java读取文件夹下的文件并进行处理

前言:

我们在处理文本的时候经常会出现这样的问题,如下图,是我们的文件村上春树的作品集(发现里面既有文件又有文件夹),但是点开一个文件夹后发现,里面又有很多的章节(例如海边的卡夫卡,点进去有很多章节),我们这样去看的时候有时候很不方便,我们将属于同一作品的章节文章合并到一起,这样就好了(这里只是举一个例子)。有时候我们处理文件的时候会遇到文件和文件夹在一起的时候,如何用程序去处理这些。

这里写图片描述

点开《海边的卡夫卡》里面又有很多章节:

这里写图片描述

在这里只是举一个例子,接下来其实是用Java如何去处理文件夹下既有文件又有子文件夹的情况。

处理策略

在这里我们的处理策略是,利用java.io.File类下的listFiles方法,将一个文件夹下的所有文件对象用一个List保存起来,然后一个一个的处理(类似于一种广度优先搜索的思想)。

读取单个文件的内容

读取单个文件的内容的代码其实很好写,就是一个io流读取文件的过程,这里我们返回String类型便于保存。

    /**
     * 读取单个文件的内容
     * @param file
     * @return 文件的内容,String
     */
    public static String readContents(File file){
        StringBuilder res = new StringBuilder();
        BufferedReader br = null;

        try {
            br = new BufferedReader(new FileReader(file));
            while(br.ready()){
                //这里可以作相关的处理过程 #todo your code#
                res.append(br.readLine() + "\n");
            }
            br.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return res.toString();
    }

读取文件夹下的文件

这里我们的初步思路是:按照广度优先搜索的策略,遇到文件将其文件的绝对路径加到一个Filelist集合中去,遇到文件夹将其文件夹的File对象加到Dirlist中去,最后处理并合并Filelist中小说名称一样的小说文本。其代码如下:

/**
     * 读取文件夹下的所有文件的内容
     * @param path
     */
    public static void readFilesDir(String path){
        LinkedList<File> Dirlist = new LinkedList<File>();
        LinkedList<String> Filelist = new LinkedList<String>();
        File dir = new File(path);
        File[] files = dir.listFiles(); 

        for(File file : files){
            if(file.isDirectory()){
                Dirlist.add(file);
            }else{
                //处理文件内容
                Filelist.add(file.getAbsolutePath());
                System.out.println(file.getAbsolutePath());
            }
        }

        File temp;
        while(!Dirlist.isEmpty()){
            temp = Dirlist.removeFirst();
            if(temp.isDirectory()){
                files = temp.listFiles();
                if(files == null) continue;
                for(File file : files){
                    if(file.isDirectory()){
                        Dirlist.add(file);
                    }else{
                        //处理文件内容
                        Filelist.add(file.getAbsolutePath());
                        System.out.println(file.getAbsolutePath());
                    }
                }
            }else{
                //处理文件内容,这种情况好像不会发生
                System.out.println("-------------");
            }
        }
    }

测试下文件的路径输出:

    public static void main(String[] args) {
        String path = "F:/testfile";
        readFilesDir(path);         
    }

发现输出的结果如下:

F:\testfile\Channel A I-那年的梦想.txt
F:\testfile\Channel A III-魔法蛋糕店.txt
F:\testfile\Channel A II-蝴蝶过期居留.txt
F:\testfile\Channel A V 刻骨的爱人.txt
F:\testfile\Channel A Ⅳ 我们都是丑小鸭.txt
F:\testfile\Channel A 如果月亮有眼睛.txt
F:\testfile\Channel A 爱情杂志.txt
F:\testfile\1973年的弹子球\1.txt
F:\testfile\1973年的弹子球\2.txt
F:\testfile\1973年的弹子球\3.txt
F:\testfile\1973年的弹子球\4.txt
F:\testfile\1973年的弹子球\5.txt
F:\testfile\且听风吟\1.txt
F:\testfile\且听风吟\2.txt
F:\testfile\且听风吟\3.txt
F:\testfile\且听风吟\4.txt
F:\testfile\且听风吟\5.txt
F:\testfile\且听风吟\6.txt
F:\testfile\且听风吟\7.txt
F:\testfile\且听风吟\8.txt
F:\testfile\世界尽头与冷酷仙境\01.txt
F:\testfile\世界尽头与冷酷仙境\02.txt
F:\testfile\世界尽头与冷酷仙境\03.txt
F:\testfile\世界尽头与冷酷仙境\04.txt
F:\testfile\世界尽头与冷酷仙境\05.txt
F:\testfile\世界尽头与冷酷仙境\06.txt
F:\testfile\世界尽头与冷酷仙境\07.txt
F:\testfile\世界尽头与冷酷仙境\08.txt
F:\testfile\世界尽头与冷酷仙境\09.txt
F:\testfile\世界尽头与冷酷仙境\10.txt
F:\testfile\世界尽头与冷酷仙境\11.txt
F:\testfile\世界尽头与冷酷仙境\12.txt
F:\testfile\世界尽头与冷酷仙境\13.txt
F:\testfile\世界尽头与冷酷仙境\14.txt
F:\testfile\世界尽头与冷酷仙境\15.txt
F:\testfile\世界尽头与冷酷仙境\16.txt
F:\testfile\世界尽头与冷酷仙境\17.txt
F:\testfile\世界尽头与冷酷仙境\18.txt
F:\testfile\世界尽头与冷酷仙境\19.txt
F:\testfile\世界尽头与冷酷仙境\20.txt
F:\testfile\世界尽头与冷酷仙境\21.txt
F:\testfile\世界尽头与冷酷仙境\22.txt
F:\testfile\世界尽头与冷酷仙境\23.txt
F:\testfile\世界尽头与冷酷仙境\24.txt
F:\testfile\世界尽头与冷酷仙境\25.txt
F:\testfile\世界尽头与冷酷仙境\26.txt
F:\testfile\世界尽头与冷酷仙境\27.txt
F:\testfile\世界尽头与冷酷仙境\28.txt
F:\testfile\世界尽头与冷酷仙境\29.txt
F:\testfile\世界尽头与冷酷仙境\30.txt
F:\testfile\世界尽头与冷酷仙境\31.txt
F:\testfile\世界尽头与冷酷仙境\32.txt
F:\testfile\世界尽头与冷酷仙境\33.txt
F:\testfile\世界尽头与冷酷仙境\34.txt
F:\testfile\世界尽头与冷酷仙境\35.txt
F:\testfile\世界尽头与冷酷仙境\36.txt
F:\testfile\世界尽头与冷酷仙境\37.txt
F:\testfile\世界尽头与冷酷仙境\38.txt
F:\testfile\世界尽头与冷酷仙境\39.txt
F:\testfile\世界尽头与冷酷仙境\40.txt
F:\testfile\世界尽头与冷酷仙境\41.txt
F:\testfile\列克星敦的幽灵\1.txt
F:\testfile\列克星敦的幽灵\2.txt
F:\testfile\列克星敦的幽灵\3.txt
F:\testfile\列克星敦的幽灵\4.txt
F:\testfile\列克星敦的幽灵\5.txt
F:\testfile\列克星敦的幽灵\6.txt
F:\testfile\列克星敦的幽灵\7.txt
F:\testfile\列克星敦的幽灵\8.txt
F:\testfile\去中国的小船\1.txt
F:\testfile\去中国的小船\2.txt
F:\testfile\去中国的小船\3.txt
F:\testfile\去中国的小船\4.txt
F:\testfile\去中国的小船\5.txt
F:\testfile\去中国的小船\6.txt
F:\testfile\去中国的小船\7.txt
F:\testfile\国境以南 太阳以西\01.txt
F:\testfile\国境以南 太阳以西\02.txt
F:\testfile\国境以南 太阳以西\03.txt
F:\testfile\国境以南 太阳以西\04.txt
F:\testfile\国境以南 太阳以西\05.txt
F:\testfile\国境以南 太阳以西\06.txt
F:\testfile\国境以南 太阳以西\07.txt
F:\testfile\国境以南 太阳以西\08.txt
F:\testfile\国境以南 太阳以西\09.txt
F:\testfile\国境以南 太阳以西\10.txt
F:\testfile\国境以南 太阳以西\11.txt
F:\testfile\国境以南 太阳以西\12.txt
F:\testfile\国境以南 太阳以西\13.txt
F:\testfile\国境以南 太阳以西\14.txt
F:\testfile\国境以南 太阳以西\15.txt
F:\testfile\国境以南 太阳以西\16.txt
F:\testfile\夜半蜘蛛猴\01.txt
F:\testfile\夜半蜘蛛猴\02.txt
F:\testfile\夜半蜘蛛猴\03.txt
F:\testfile\夜半蜘蛛猴\04.txt
F:\testfile\夜半蜘蛛猴\05.txt
F:\testfile\夜半蜘蛛猴\06.txt
F:\testfile\夜半蜘蛛猴\07.txt
F:\testfile\夜半蜘蛛猴\08.txt
F:\testfile\夜半蜘蛛猴\09.txt
F:\testfile\夜半蜘蛛猴\10.txt
F:\testfile\夜半蜘蛛猴\11.txt
F:\testfile\夜半蜘蛛猴\12.txt
F:\testfile\夜半蜘蛛猴\13.txt
F:\testfile\夜半蜘蛛猴\14.txt
F:\testfile\天黑以后\01.txt
F:\testfile\天黑以后\02.txt
F:\testfile\天黑以后\03.txt
F:\testfile\天黑以后\04.txt
F:\testfile\天黑以后\05.txt
F:\testfile\天黑以后\06.txt
F:\testfile\天黑以后\07.txt
F:\testfile\天黑以后\08.txt
F:\testfile\天黑以后\09.txt
F:\testfile\天黑以后\10.txt
F:\testfile\天黑以后\11.txt
F:\testfile\天黑以后\12.txt
F:\testfile\天黑以后\13.txt
F:\testfile\天黑以后\14.txt
F:\testfile\天黑以后\15.txt
F:\testfile\天黑以后\16.txt
F:\testfile\天黑以后\17.txt
F:\testfile\天黑以后\18.txt
F:\testfile\天黑以后\19.txt
F:\testfile\奇鸟行状录\01.txt
F:\testfile\奇鸟行状录\02.txt
F:\testfile\奇鸟行状录\03.txt
F:\testfile\奇鸟行状录\04.txt
F:\testfile\奇鸟行状录\05.txt
F:\testfile\奇鸟行状录\06.txt
F:\testfile\奇鸟行状录\07.txt
F:\testfile\奇鸟行状录\08.txt
F:\testfile\奇鸟行状录\09.txt
F:\testfile\奇鸟行状录\10.txt
F:\testfile\奇鸟行状录\11.txt
F:\testfile\奇鸟行状录\12.txt
F:\testfile\奇鸟行状录\13.txt
F:\testfile\奇鸟行状录\14.txt
F:\testfile\奇鸟行状录\15.txt
F:\testfile\奇鸟行状录\16.txt
F:\testfile\奇鸟行状录\17.txt
F:\testfile\奇鸟行状录\18.txt
F:\testfile\奇鸟行状录\19.txt
F:\testfile\奇鸟行状录\20.txt
F:\testfile\奇鸟行状录\21.txt
F:\testfile\奇鸟行状录\22.txt
F:\testfile\奇鸟行状录\23.txt
F:\testfile\奇鸟行状录\24.txt
F:\testfile\奇鸟行状录\25.txt
F:\testfile\奇鸟行状录\26.txt
F:\testfile\奇鸟行状录\27.txt
F:\testfile\奇鸟行状录\28.txt
F:\testfile\奇鸟行状录\29.txt
F:\testfile\奇鸟行状录\30.txt
F:\testfile\奇鸟行状录\31.txt
F:\testfile\奇鸟行状录\32.txt
F:\testfile\奇鸟行状录\33.txt
F:\testfile\奇鸟行状录\34.txt
F:\testfile\奇鸟行状录\35.txt
F:\testfile\奇鸟行状录\36.txt
F:\testfile\奇鸟行状录\37.txt
F:\testfile\奇鸟行状录\38.txt
F:\testfile\奇鸟行状录\39.txt
F:\testfile\奇鸟行状录\40.txt
F:\testfile\奇鸟行状录\41.txt
F:\testfile\奇鸟行状录\42.txt
F:\testfile\奇鸟行状录\43.txt
F:\testfile\奇鸟行状录\44.txt
F:\testfile\奇鸟行状录\45.txt
F:\testfile\奇鸟行状录\46.txt
F:\testfile\奇鸟行状录\47.txt
F:\testfile\奇鸟行状录\48.txt
F:\testfile\奇鸟行状录\49.txt
F:\testfile\奇鸟行状录\50.txt
F:\testfile\奇鸟行状录\51.txt
F:\testfile\奇鸟行状录\52.txt
F:\testfile\奇鸟行状录\53.txt
F:\testfile\奇鸟行状录\54.txt
F:\testfile\奇鸟行状录\55.txt
F:\testfile\奇鸟行状录\56.txt
F:\testfile\奇鸟行状录\57.txt
F:\testfile\奇鸟行状录\58.txt
F:\testfile\奇鸟行状录\59.txt
F:\testfile\奇鸟行状录\60.txt
F:\testfile\奇鸟行状录\61.txt
F:\testfile\奇鸟行状录\62.txt
F:\testfile\奇鸟行状录\63.txt
F:\testfile\奇鸟行状录\64.txt
F:\testfile\奇鸟行状录\65.txt
F:\testfile\奇鸟行状录\66.txt
F:\testfile\奇鸟行状录\67.txt
F:\testfile\奇鸟行状录\68.txt
F:\testfile\奇鸟行状录\69.txt
F:\testfile\奇鸟行状录\70.txt
F:\testfile\奇鸟行状录\71.txt
F:\testfile\奇鸟行状录\72.txt
F:\testfile\奇鸟行状录\73.txt
F:\testfile\奇鸟行状录\74.txt
F:\testfile\寻羊冒险记\1.txt
F:\testfile\寻羊冒险记\2.txt
F:\testfile\寻羊冒险记\3.txt
F:\testfile\寻羊冒险记\4.txt
F:\testfile\寻羊冒险记\5.txt
F:\testfile\寻羊冒险记\6.txt
F:\testfile\寻羊冒险记\7.txt
F:\testfile\寻羊冒险记\8.txt
F:\testfile\寻羊冒险记\9.txt
F:\testfile\寻羊冒险记\contents.txt
F:\testfile\挪威的森林\挪威的森林.txt
F:\testfile\斯普特尼克恋人\01.txt
F:\testfile\斯普特尼克恋人\02.txt
F:\testfile\斯普特尼克恋人\03.txt
F:\testfile\斯普特尼克恋人\04.txt
F:\testfile\斯普特尼克恋人\05.txt
F:\testfile\斯普特尼克恋人\06.txt
F:\testfile\斯普特尼克恋人\07.txt
F:\testfile\斯普特尼克恋人\08.txt
F:\testfile\斯普特尼克恋人\09.txt
F:\testfile\斯普特尼克恋人\10.txt
F:\testfile\斯普特尼克恋人\11.txt
F:\testfile\斯普特尼克恋人\12.txt
F:\testfile\斯普特尼克恋人\13.txt
F:\testfile\斯普特尼克恋人\14.txt
F:\testfile\斯普特尼克恋人\15.txt
F:\testfile\斯普特尼克恋人\16.txt
F:\testfile\斯普特尼克恋人\17.txt
F:\testfile\旋转木马鏖战记\1.txt
F:\testfile\旋转木马鏖战记\2.txt
F:\testfile\旋转木马鏖战记\3.txt
F:\testfile\旋转木马鏖战记\4.txt
F:\testfile\旋转木马鏖战记\5.txt
F:\testfile\旋转木马鏖战记\6.txt
F:\testfile\旋转木马鏖战记\7.txt
F:\testfile\旋转木马鏖战记\8.txt
F:\testfile\旋转木马鏖战记\9.txt
F:\testfile\村上春树短篇集\01.txt
F:\testfile\村上春树短篇集\02.txt
F:\testfile\村上春树短篇集\03.txt
F:\testfile\村上春树短篇集\04.txt
F:\testfile\村上春树短篇集\05.txt
F:\testfile\村上春树短篇集\06.txt
F:\testfile\村上春树短篇集\07.txt
F:\testfile\村上春树短篇集\08.txt
F:\testfile\村上春树短篇集\09.txt
F:\testfile\村上春树短篇集\10.txt
F:\testfile\村上春树短篇集\11.txt
F:\testfile\村上春树短篇集\12.txt
F:\testfile\村上春树短篇集\13.txt
F:\testfile\村上春树短篇集\14.txt
F:\testfile\村上春树短篇集\15.txt
F:\testfile\村上春树短篇集\16.txt
F:\testfile\村上春树短篇集\17.txt
F:\testfile\村上春树短篇集\18.txt
F:\testfile\村上春树短篇集\19.txt
F:\testfile\村上春树短篇集\20.txt
F:\testfile\村上春树短篇集\21.txt
F:\testfile\村上春树短篇集\22.txt
F:\testfile\村上春树短篇集\23.txt
F:\testfile\村上春树短篇集\24.txt
F:\testfile\村上春树短篇集\25.txt
F:\testfile\村上春树短篇集\26.txt
F:\testfile\村上春树短篇集\27.txt
F:\testfile\村上春树短篇集\28.txt
F:\testfile\村上春树短篇集\29.txt
F:\testfile\村上春树短篇集\30.txt
F:\testfile\村上春树短篇集\31.txt
F:\testfile\村上春树短篇集\32.txt
F:\testfile\村上春树短篇集\33.txt
F:\testfile\村上春树短篇集\34.txt
F:\testfile\村上春树短篇集\35.txt
F:\testfile\村上春树短篇集\36.txt
F:\testfile\村上春树短篇集\37.txt
F:\testfile\村上春树短篇集\38.txt
F:\testfile\村上春树短篇集\39.txt
F:\testfile\村上春树短篇集\40.txt
F:\testfile\村上春树短篇集\41.txt
F:\testfile\村上春树短篇集\42.txt
F:\testfile\村上春树短篇集\43.txt
F:\testfile\村上春树短篇集\44.txt
F:\testfile\村上春树短篇集\45.txt
F:\testfile\村上春树短篇集\46.txt
F:\testfile\村上春树短篇集\47.txt
F:\testfile\村上春树短篇集\48.txt
F:\testfile\村上春树短篇集\49.txt
F:\testfile\村上春树短篇集\50.txt
F:\testfile\村上春树短篇集\51.txt
F:\testfile\村上春树短篇集\52.txt
F:\testfile\村上春树短篇集\53.txt
F:\testfile\村上春树短篇集\54.txt
F:\testfile\村上春树短篇集\55.txt
F:\testfile\村上春树短篇集\56.txt
F:\testfile\村上春树短篇集\57.txt
F:\testfile\村上春树短篇集\58.txt
F:\testfile\海边的卡夫卡\01.txt
F:\testfile\海边的卡夫卡\02.txt
F:\testfile\海边的卡夫卡\03.txt
F:\testfile\海边的卡夫卡\04.txt
F:\testfile\海边的卡夫卡\05.txt
F:\testfile\海边的卡夫卡\06.txt
F:\testfile\海边的卡夫卡\07.txt
F:\testfile\海边的卡夫卡\08.txt
F:\testfile\海边的卡夫卡\09.txt
F:\testfile\海边的卡夫卡\10.txt
F:\testfile\海边的卡夫卡\11.txt
F:\testfile\海边的卡夫卡\12.txt
F:\testfile\海边的卡夫卡\13.txt
F:\testfile\海边的卡夫卡\14.txt
F:\testfile\海边的卡夫卡\15.txt
F:\testfile\海边的卡夫卡\16.txt
F:\testfile\海边的卡夫卡\17.txt
F:\testfile\海边的卡夫卡\18.txt
F:\testfile\海边的卡夫卡\19.txt
F:\testfile\海边的卡夫卡\20.txt
F:\testfile\海边的卡夫卡\21.txt
F:\testfile\海边的卡夫卡\22.txt
F:\testfile\海边的卡夫卡\23.txt
F:\testfile\海边的卡夫卡\24.txt
F:\testfile\海边的卡夫卡\25.txt
F:\testfile\海边的卡夫卡\26.txt
F:\testfile\海边的卡夫卡\27.txt
F:\testfile\海边的卡夫卡\28.txt
F:\testfile\海边的卡夫卡\29.txt
F:\testfile\海边的卡夫卡\30.txt
F:\testfile\海边的卡夫卡\31.txt
F:\testfile\海边的卡夫卡\32.txt
F:\testfile\海边的卡夫卡\33.txt
F:\testfile\海边的卡夫卡\34.txt
F:\testfile\海边的卡夫卡\35.txt
F:\testfile\海边的卡夫卡\36.txt
F:\testfile\海边的卡夫卡\37.txt
F:\testfile\海边的卡夫卡\38.txt
F:\testfile\海边的卡夫卡\39.txt
F:\testfile\海边的卡夫卡\40.txt
F:\testfile\海边的卡夫卡\41.txt
F:\testfile\海边的卡夫卡\42.txt
F:\testfile\海边的卡夫卡\43.txt
F:\testfile\海边的卡夫卡\44.txt
F:\testfile\海边的卡夫卡\45.txt
F:\testfile\海边的卡夫卡\46.txt
F:\testfile\海边的卡夫卡\47.txt
F:\testfile\海边的卡夫卡\48.txt
F:\testfile\海边的卡夫卡\49.txt
F:\testfile\海边的卡夫卡\50.txt
F:\testfile\海边的卡夫卡\51.txt
F:\testfile\舞!舞!舞!\01.txt
F:\testfile\舞!舞!舞!\02.txt
F:\testfile\舞!舞!舞!\03.txt
F:\testfile\舞!舞!舞!\04.txt
F:\testfile\舞!舞!舞!\05.txt
F:\testfile\舞!舞!舞!\06.txt
F:\testfile\舞!舞!舞!\07.txt
F:\testfile\舞!舞!舞!\08.txt
F:\testfile\舞!舞!舞!\09.txt
F:\testfile\舞!舞!舞!\10.txt
F:\testfile\舞!舞!舞!\11.txt
F:\testfile\舞!舞!舞!\12.txt
F:\testfile\舞!舞!舞!\13.txt
F:\testfile\舞!舞!舞!\14.txt
F:\testfile\舞!舞!舞!\15.txt
F:\testfile\舞!舞!舞!\16.txt
F:\testfile\舞!舞!舞!\17.txt
F:\testfile\舞!舞!舞!\18.txt
F:\testfile\舞!舞!舞!\19.txt
F:\testfile\舞!舞!舞!\20.txt
F:\testfile\舞!舞!舞!\21.txt
F:\testfile\舞!舞!舞!\22.txt
F:\testfile\舞!舞!舞!\23.txt
F:\testfile\舞!舞!舞!\24.txt
F:\testfile\舞!舞!舞!\25.txt
F:\testfile\舞!舞!舞!\26.txt
F:\testfile\舞!舞!舞!\27.txt
F:\testfile\舞!舞!舞!\28.txt
F:\testfile\舞!舞!舞!\29.txt
F:\testfile\舞!舞!舞!\30.txt
F:\testfile\舞!舞!舞!\31.txt
F:\testfile\舞!舞!舞!\32.txt
F:\testfile\舞!舞!舞!\33.txt
F:\testfile\舞!舞!舞!\34.txt
F:\testfile\舞!舞!舞!\35.txt
F:\testfile\舞!舞!舞!\36.txt
F:\testfile\舞!舞!舞!\37.txt
F:\testfile\舞!舞!舞!\38.txt
F:\testfile\舞!舞!舞!\39.txt
F:\testfile\舞!舞!舞!\40.txt
F:\testfile\舞!舞!舞!\41.txt
F:\testfile\舞!舞!舞!\42.txt
F:\testfile\舞!舞!舞!\43.txt
F:\testfile\舞!舞!舞!\44.txt
F:\testfile\舞!舞!舞!\45.txt
F:\testfile\象厂喜剧\1.txt
F:\testfile\象厂喜剧\2.txt
F:\testfile\象厂喜剧\3.txt
F:\testfile\象厂喜剧\4.txt
F:\testfile\象厂喜剧\5.txt
F:\testfile\象厂喜剧\6.txt
F:\testfile\象厂喜剧\7.txt

这个时候有了这些文件的绝对路径,就可以按照读取单个文件内容的方法获取这些文件的内容然后进行合并。这里的合并其实很简单,路径中按照\分割后的第三个字符串就是小说的名字,如果小说名一样就合并为一个文件并保存到新的文本中去。

这里合并并保存的代码如下:

    /**
     * 保存文件
     */
    public static void saveFiles(String contents, String output){
        File outputFile = new File(output);
        try {
            if(!outputFile.exists()){
                outputFile.createNewFile();
            }
            //这里的true是在文本的末尾追加而不是删除重新添加
            BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile, true));
            bw.write(contents);

            bw.flush();
            bw.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("保存成功!!!");
    }

    //合并小说名一样的文件
    public static void mergeFiles(List<String> files, String output){
        if(files == null){
            System.out.println("Error:文件list为空");
        }

        for(String filepath : files){

            String name = filepath.split("\\\\")[2];
            String contents = readContents(new File(filepath));
            saveFiles(contents,output+"/"+name+".txt");

        }

        System.out.println("合并完成");
    }

然后查看结果:

这里写图片描述

整个程序代码如下:

package com.hfut.Files;

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.util.HashSet;
import java.util.LinkedList;
import java.util.List;

public class FileUtils {

    //用来保存文件的绝对路径的list
    static LinkedList<String> Filelist = new LinkedList<String>();

    /**
     * 读取文件夹下的所有文件并获取文件的绝对路径
     * @param path
     */ 
    public static void readFilesDir(String path){
        LinkedList<File> Dirlist = new LinkedList<File>();

        File dir = new File(path);
        File[] files = dir.listFiles(); 

        for(File file : files){
            if(file.isDirectory()){
                Dirlist.add(file);
            }else{
                //处理文件内容
                Filelist.add(file.getAbsolutePath());
                System.out.println(file.getAbsolutePath());
            }
        }

        File temp;
        while(!Dirlist.isEmpty()){
            temp = Dirlist.removeFirst();
            if(temp.isDirectory()){
                files = temp.listFiles();
                if(files == null) continue;
                for(File file : files){
                    if(file.isDirectory()){
                        Dirlist.add(file);
                    }else{
                        //处理文件内容
                        Filelist.add(file.getAbsolutePath());
                        System.out.println(file.getAbsolutePath());
                    }
                }
            }else{
                //处理文件内容,这种情况好像不会发生
                System.out.println("-------------");
            }
        }
    }


    /**
     * 读取单个文件的内容
     * @param file
     * @return 文件的内容,String
     */
    public static String readContents(File file){
        StringBuilder res = new StringBuilder();
        BufferedReader br = null;

        try {
            br = new BufferedReader(new FileReader(file));
            while(br.ready()){
                res.append(br.readLine() + "\n");
            }
            br.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return res.toString();
    }

    /**
     * 保存文件
     */
    public static void saveFiles(String contents, String output){
        File outputFile = new File(output);
        try {
            if(!outputFile.exists()){
                outputFile.createNewFile();
            }

            BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile, true));
            bw.write(contents);

            bw.flush();
            bw.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("保存成功!!!");
    }

    //合并小说名一样的文件
    public static void mergeFiles(List<String> files, String output){
        if(files == null){
            System.out.println("Error:文件list为空");
        }

        for(String filepath : files){

            String name = filepath.split("\\\\")[2];
            String contents = readContents(new File(filepath));
            saveFiles(contents,output+"/"+name+".txt");

        }

        System.out.println("合并完成");
    }

    public static void main(String[] args) {
        String path = "F:/testfile";
        String out = "F:/test";
        readFilesDir(path);
        mergeFiles(Filelist, out);

    }
}

猜你喜欢

转载自blog.csdn.net/u013963380/article/details/78531392