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表示行的列表中,然后将该集合添加到已经包含新的第一行的集合中。之后,您只需再次编写这些行,包括新的第一行。
TA贡献1827条经验 获得超7个赞
我认为您想要做的是列出目录中的所有文件,然后处理每个文件。如果是这样的话你可以做
File[] children = dir.listFiles();
for (File child: children) {
if (child.isFile()) {
// append text
}
}
我已经省略了附加数据的代码,因为您说您已经知道该怎么做。在这一点上,它只是将代码应用于每个文件的情况
TA贡献1828条经验 获得超6个赞
您可以创建一个包含目录的文件:
File directory = new File("pathOfYourDirectory");
然后你可以得到所有的从属文件和目录:
File[] subDirectories = directory.listFiles();
现在你可以遍历这个数组了。但是你应该检查每个文件是否是一个文件。然后您可以获取此文件并附加文本。
for (File subDir: subDirectories ) {
if (subDir.isFile()) {
// do your stuff
}
}
添加回答
举报