为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用Java将文本附加到一个目录中的多个文件

如何使用Java将文本附加到一个目录中的多个文件

梵蒂冈之花 2023-06-08 19:16:24
我有很多包含一些数据的 .txt 文件1.txt 2.txt 3.txt ...我想添加相同的文本,例如"hello world"添加到同一目录中的每个 txt 文件。我知道在那种情况下如何处理一个文件,但如何处理多个文件呢?我必须使用 Java 来做到这一点......
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

您可以java.nio结合使用 Java 8 功能来列出文件并为每个文件执行一些操作。有一种方法可以将文本附加到文件。


请参阅此示例并阅读代码中的一些注释:


public static void main(String[] args) {

    // define the directory that contains the text files

    String dir = "U:\\workspace\\git\\ZZ--Temp\\TextFiles";

    Path dirPath = Paths.get(dir);

    // predefine some lines to be appended to every file

    List<String> linesToBeAppended = new ArrayList<>();

    linesToBeAppended.add("Hello new line in the file!");


    try {

        // go through all files in the directory (tested with .txt files only)

        Files.list(dirPath)

            // filter only files

            .filter(Files::isRegularFile)

            .forEach(filePath -> {

                try {

                    // append the predefined text to the file

                    Files.write(filePath, linesToBeAppended, StandardOpenOption.APPEND);

                } catch (IOException e) {

                    System.err.println("Could not append text to file " 

                            + filePath.toAbsolutePath().toString());

                    e.printStackTrace();

                }

            });

    } catch (IOException e) {

        System.err.println("Could not list files in " 

                + dirPath.toAbsolutePath().toString());

        e.printStackTrace();

    }

}

不幸的是,由于 Java 8 功能的不同范围,嵌套try-是必需的。它很丑陋,但优点是您可以通过列出文件或访问文件来区分抛出的 s 。catchforEachException


编辑

如果要在文件中添加新的第一行,则必须读取并重写文件。请参阅此示例,它与第一个示例略有不同:


public static void main(String[] args) {

    // define the directory that contains the text files

    String dir = "U:\\workspace\\git\\ZZ--Temp\\TextFiles";

    Path dirPath = Paths.get(dir);


    try {

        // go through all files in the directory (tested with .txt files only)

        Files.list(dirPath)

            // filter only files

            .filter(Files::isRegularFile)

            .forEach(filePath -> {

                // predefine some lines to be appended to every file

                List<String> linesToBeAppended = new ArrayList<>();

                // add the first line as predefined first line

                linesToBeAppended.add("Hello another line in the file!");


                try {

                    // then read the file and add its lines to the list with

                    // that already contains the new first line

                    linesToBeAppended.addAll(Files.readAllLines(filePath));

                    // append the extended text to the file (again),

                    // but this time overwrite the content

                    Files.write(filePath, linesToBeAppended,

                                StandardOpenOption.TRUNCATE_EXISTING);

                } catch (IOException e) {

                    System.err.println("Could not append text to file " 

                            + filePath.toAbsolutePath().toString());

                    e.printStackTrace();

                }

            });

    } catch (IOException e) {

        System.err.println("Could not list files in " 

                + dirPath.toAbsolutePath().toString());

        e.printStackTrace();

    }

}

另一个重要的区别是 中的标志Files.write,它不再APPEND存在,但是TRUNCATE_EXISTING因为您将文件读入String表示行的列表中,然后将该集合添加到已经包含新的第一行的集合中。之后,您只需再次编写这些行,包括新的第一行。


查看完整回答
反对 回复 2023-06-08
?
慕仙森

TA贡献1827条经验 获得超7个赞

我认为您想要做的是列出目录中的所有文件,然后处理每个文件。如果是这样的话你可以做


File[] children = dir.listFiles();

for (File child: children) {

    if (child.isFile()) {

        // append text

    }

}

我已经省略了附加数据的代码,因为您说您已经知道该怎么做。在这一点上,它只是将代码应用于每个文件的情况


查看完整回答
反对 回复 2023-06-08
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

您可以创建一个包含目录的文件:


File directory = new File("pathOfYourDirectory");

然后你可以得到所有的从属文件和目录:


File[] subDirectories = directory.listFiles();

现在你可以遍历这个数组了。但是你应该检查每个文件是否是一个文件。然后您可以获取此文件并附加文本。


for (File subDir: subDirectories ) {

    if (subDir.isFile()) {

        // do your stuff

    }

}


查看完整回答
反对 回复 2023-06-08
  • 3 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信