Java语言怎么遍历一个目录中所有后缀为.txt的文件,并且将其中所有的内容去掉空行再连接出来,输出到和目录相同层次的文件out.txt

Java语言怎么遍历一个目录中所有后缀为.txt的文件,并且将其中所有的内容去掉空行再连接出来,输出到和目录相同层次的文件out.txt,这个读取之后是怎么链接的?可以用什么类的思路呢

java里有个listFile方法可以获取目录下的所有文件,获取完你可以遍历文件列表,判断是是不是txt后缀的文件。如果是,使用BufferedReader读取文件内容,逐行处理内容并添加到StringBuilder中。最后,使用BufferedWriter将处理后的内容写入到输出文件中。


import java.io.*;

public class FileProcessor {
    public static void main(String[] args) {
        // 目录路径
        String directoryPath = "目录路径";
        // 输出文件路径
        String outputPath = directoryPath + "/out.txt";

        File directory = new File(directoryPath);
        File outputFile = new File(outputPath);

        if (!directory.isDirectory()) {
            System.out.println("不是有效的目录路径。");
            return;
        }

        BufferedWriter writer = null;
        try {
            writer = new BufferedWriter(new FileWriter(outputFile));
            processFiles(directory, writer);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    private static void processFiles(File directory, BufferedWriter writer) throws IOException {
        File[] files = directory.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                processFiles(file, writer);
            } else if (file.getName().endsWith(".txt")) {
                processFile(file, writer);
            }
        }
    }

    private static void processFile(File file, BufferedWriter writer) throws IOException {
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader(file));
            String line;
            while ((line = reader.readLine()) != null) {
                if (!line.trim().isEmpty()) {
                    writer.write(line);
                    writer.newLine();
                }
            }
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

需要修改directoryPath为您的目录路径,然后运行main方法。程序将会遍历目录中所有后缀为.txt的文件,删除其中的空行,然后将处理后的内容写入到out.txt文件中。

要遍历一个目录中所有后缀为.txt的文件,并且将其中所有的内容去掉空行再连接出来,可以使用Java的IO流和文件操作的功能来实现。具体步骤如下:

  1. 获取目录路径。可以使用File类来表示目录,例如:
File dir = new File("path/to/dir");
  1. 遍历目录中所有后缀为.txt的文件。可以使用File类的listFiles方法来获取目录下的所有文件,然后使用FilenameFilter接口来过滤出后缀为.txt的文件,例如:
File[] files = dir.listFiles(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
        return name.toLowerCase().endsWith(".txt");
    }
});
  1. 读取文件内容,并将非空行写入输出文件。可以使用BufferedReader类和BufferedWriter类进行文件操作,例如:
File output = new File(dir, "out.txt");
BufferedWriter writer = new BufferedWriter(new FileWriter(output));
for (File file : files) {
    BufferedReader reader = new BufferedReader(new FileReader(file));
    String line;
    while ((line = reader.readLine()) != null) {
        if (!line.trim().isEmpty()) {
            writer.write(line);
            writer.newLine();
        }
    }
    reader.close();
}
writer.close();

在这个实现中,我们首先使用File类来表示要遍历的目录,并使用listFiles方法获取目录下的所有文件。然后,我们使用FilenameFilter接口来过滤出后缀为.txt的文件。接下来,我们使用BufferedReader类和BufferedWriter类分别读取文件和写入文件内容。在读取文件内容时,我们使用readLine方法读取每行内容,然后使用trim方法去掉行首和行尾的空白字符,再判断是否为空行。如果不是空行,则将该行内容写入输出文件中,并加上换行符。最后,我们关闭文件流即可。

完整代码如下:

import java.io.*;

public class TxtFileProcessor {
    public static void main(String[] args) throws IOException {
        File dir = new File("path/to/dir");
        File[] files = dir.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.toLowerCase().endsWith(".txt");
            }
        });
        File output = new File(dir, "out.txt");
        BufferedWriter writer = new BufferedWriter(new FileWriter(output));
        for (File file : files) {
            BufferedReader reader = new BufferedReader(new FileReader(file));
            String line;
            while ((line = reader.readLine()) != null) {
                if (!line.trim().isEmpty()) {
                    writer.write(line);
                    writer.newLine();
                }
            }
            reader.close();
        }
        writer.close();
    }
}

在输出文件中,多个文件的内容会连接在一起,每个文件的内容之间会有一个换行符分隔。也就是说,输出文件中的内容是将多个文件的非空行连接在一起,每个文件的内容之间用一个换行符分隔。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/1072734
  • 你也可以参考下这篇文章:Java读取txt文件中的数字,用冒泡排序将其拍好序,和Java内置排序比较时间
  • 除此之外, 这篇博客: 【Java文件操作(八)】将控制台输出重定向到txt文件中的 运行效果 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    在这里插入图片描述

  • 以下回答来自chatgpt:

    对于这个问题,你可以使用Java的File类和递归来遍历一个目录中的所有文件。首先,通过File类的构造函数指定目录的路径,并使用listFiles方法获取目录中的所有文件。然后,对于每个文件,判断它的后缀名是否为".txt",如果是的话,就进行处理。

    下面是一个示例代码来展示解决方案:

    import java.io.*;
    
    public class FileProcessor {
    
        public static void main(String[] args) {
            String directoryPath = "C:\\path\\to\\directory";
    
            File directory = new File(directoryPath);
            processFiles(directory);
        }
    
        public static void processFiles(File file) {
            if (file.isDirectory()) {
                // 递归处理目录中的文件
                for (File subFile : file.listFiles()) {
                    processFiles(subFile);
                }
            } else {
                // 处理文件
                if (file.getName().endsWith(".txt")) {
                    processTxtFile(file);
                }
            }
        }
    
        public static void processTxtFile(File file) {
            try (BufferedReader reader = new BufferedReader(new FileReader(file));
                 BufferedWriter writer = new BufferedWriter(new FileWriter("out.txt", true))) {
    
                String line;
                while ((line = reader.readLine()) != null) {
                    // 去掉空行
                    if (!line.trim().isEmpty()) {
                        writer.write(line);
                        writer.newLine();
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    解释代码的运行过程:

    1. 创建一个File对象,指定要遍历的目录路径。
    2. 使用listFiles方法获取目录中的所有文件,对于每个文件,判断它的后缀名是否为".txt",如果是的话,进行处理。
    3. 对于每个txt文件,使用BufferedReader读取文件内容,使用BufferedWriter将处理后的内容写入到"out.txt"文件中。
    4. 在读取每个文件的行时,使用trim方法去掉行首和行尾的空格,并使用isEmpty方法判断是否为空行。
    5. 使用try-with-resources语句处理流的关闭操作,这样可以确保流被正确关闭。

    这样,就可以实现遍历一个目录中所有后缀为.txt的文件,并且将其中所有的内容去掉空行再连接起来,输出到与目录相同层次的文件out.txt的功能。

    希望我的回答对你有帮助,如果还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^