将文本添加到具有条件的目录中的多个文件 (Java)
Add text to several files in directories with conditions (Java)
我有一个包含一堆子目录的目录,每个子目录包含几个文本文件。每个子目录都包含一个文本文件,该文件与包含它的子目录同名;我想将这个文件的内容添加到所有其他文本文件中,除了与子目录共享名称的那个,我想把它放在 java.
中
例如给定目录“a”,包含子目录“b”、“c”、“d”,分别包含文件“b”、“e”、“f”和“c”、“g” ”、“h”和“d”、“i”、“j”,我想让目录“a”包含子目录“b”、“c”、“d”,分别包含文件“b”、“b” +e"、"b+f"、"c"、"c+g"、"c+h"、"d"、"d+i"、"d+j",并可能删除添加的文件,即文件“a”、“b”、“c”。
final File folder = new File("/path-of-directory/");
public static void listFilesForFolder(final File folder) {
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
listFilesForFolder(fileEntry);
} else if (fileEntry.getName().substring(0, fileEntry.getName().lastIndexOf(".")).toLowerCase().equals(folder.getName().toLowerCase()))
// found the file which content has to be added to other files in the same directory. How to?
}
}
这个解决方案对我来说效果很好,请务必阅读评论以了解详细信息:
public class FileCopy {
public static void recursivelyCopyContent(final File folder) {
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
recursivelyCopyContent(fileEntry);
} else if (fileEntry.getName().substring(0, fileEntry.getName().lastIndexOf(".")).toLowerCase().equals(folder.getName().toLowerCase())) {
// just pass the folder and the file to the method that will do the actual content copy
copyContent(folder, fileEntry);
}
}
}
public static void copyContent(final File folder, final File fileName) {
try {
// get the byte[] content of the source file
byte[] fileContent = Files.readAllBytes(fileName.toPath());
for (final File fileEntry : folder.listFiles()) {
// only select files with a different absolute path than the source one
if(fileEntry.isFile() && !fileEntry.getAbsolutePath().equals(fileName.getAbsolutePath())) {
// append contents from source to destination file
Files.write(fileEntry.toPath(), fileContent, StandardOpenOption.APPEND);
}
}
}catch (IOException e) {
e.getStackTrace();
}
}
public static void main(String[] args) {
final File folder = new File("/path-of-directory/");
FileCopy.recursivelyCopyContent(folder);
}
}
注意没有扩展名的文件:你的情况
fileEntry.getName().substring(0, fileEntry.getName().lastIndexOf(".")).toLowerCase().equals(folder.getName().toLowerCase())
将抛出 java.lang.StringIndexOutOfBoundsException
因为他们的名字中不存在 .
个字符。
在这种情况下,我建议采用以下方法:
// both cases covered: files have or do not have an extension
if (
(!fileEntry.getName().contains(".") && fileEntry.getName().toLowerCase().equals(folder.getName().toLowerCase())) ||
(fileEntry.getName().contains(".") && fileEntry.getName().substring(0, fileEntry.getName().lastIndexOf(".")).toLowerCase().equals(folder.getName().toLowerCase()))
)
我有一个包含一堆子目录的目录,每个子目录包含几个文本文件。每个子目录都包含一个文本文件,该文件与包含它的子目录同名;我想将这个文件的内容添加到所有其他文本文件中,除了与子目录共享名称的那个,我想把它放在 java.
中例如给定目录“a”,包含子目录“b”、“c”、“d”,分别包含文件“b”、“e”、“f”和“c”、“g” ”、“h”和“d”、“i”、“j”,我想让目录“a”包含子目录“b”、“c”、“d”,分别包含文件“b”、“b” +e"、"b+f"、"c"、"c+g"、"c+h"、"d"、"d+i"、"d+j",并可能删除添加的文件,即文件“a”、“b”、“c”。
final File folder = new File("/path-of-directory/");
public static void listFilesForFolder(final File folder) {
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
listFilesForFolder(fileEntry);
} else if (fileEntry.getName().substring(0, fileEntry.getName().lastIndexOf(".")).toLowerCase().equals(folder.getName().toLowerCase()))
// found the file which content has to be added to other files in the same directory. How to?
}
}
这个解决方案对我来说效果很好,请务必阅读评论以了解详细信息:
public class FileCopy {
public static void recursivelyCopyContent(final File folder) {
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
recursivelyCopyContent(fileEntry);
} else if (fileEntry.getName().substring(0, fileEntry.getName().lastIndexOf(".")).toLowerCase().equals(folder.getName().toLowerCase())) {
// just pass the folder and the file to the method that will do the actual content copy
copyContent(folder, fileEntry);
}
}
}
public static void copyContent(final File folder, final File fileName) {
try {
// get the byte[] content of the source file
byte[] fileContent = Files.readAllBytes(fileName.toPath());
for (final File fileEntry : folder.listFiles()) {
// only select files with a different absolute path than the source one
if(fileEntry.isFile() && !fileEntry.getAbsolutePath().equals(fileName.getAbsolutePath())) {
// append contents from source to destination file
Files.write(fileEntry.toPath(), fileContent, StandardOpenOption.APPEND);
}
}
}catch (IOException e) {
e.getStackTrace();
}
}
public static void main(String[] args) {
final File folder = new File("/path-of-directory/");
FileCopy.recursivelyCopyContent(folder);
}
}
注意没有扩展名的文件:你的情况
fileEntry.getName().substring(0, fileEntry.getName().lastIndexOf(".")).toLowerCase().equals(folder.getName().toLowerCase())
将抛出 java.lang.StringIndexOutOfBoundsException
因为他们的名字中不存在 .
个字符。
在这种情况下,我建议采用以下方法:
// both cases covered: files have or do not have an extension
if (
(!fileEntry.getName().contains(".") && fileEntry.getName().toLowerCase().equals(folder.getName().toLowerCase())) ||
(fileEntry.getName().contains(".") && fileEntry.getName().substring(0, fileEntry.getName().lastIndexOf(".")).toLowerCase().equals(folder.getName().toLowerCase()))
)