使用 Java8(Eclipse IDE)上的 BufferedWriter 将给定目录和文件列表导出到文件。这工作正常。
某些文件具有特殊字符,如“[”、“]”或扩展名如“.zip”,我希望在保存文件时将其删除。尝试过 .replaceALL 但陷入如何使其工作的困境。请问有什么建议吗?
public static void getDirectoryList() throws IOException
{
String path = "C:\\Users\\";
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
File file = new File("DirectoryList.txt");
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getName());
BufferedWriter bw = new BufferedWriter(fw);
for (File f : listOfFiles) {
// .replaceALL wants to be cast. Is there an alternative to
// .replaceAll when listing out a file listing to file.
// Or, am I doing something silly....
f = f.replaceAll(".zip", "");
bw.write(f.getName());
bw.newLine();
}
bw.close();
}
当前文本文件输出示例:
[name1].doc <-将名称保存到文件时尝试删除“[”和“]”。
filename.zip <-将名称保存到文件时尝试删除“.zip”。
目录名称1
目录名称2
(原始文件和目录名称保留,仅更改保存到文件的结果。)
所需的文本文件输出
名称1.doc
文件名
目录名称1
目录名称2
最佳答案
replaceAll
不是 File
的方法,而是 String
的方法。
for(File f : listOfFiles) {
String fileName = f.getName();
fileName = fileName.replaceAll("\\.zip", "");
fileName = fileName.replaceAll("\\[", "");
fileName = fileName.replaceAll("]", "");
bw.write(fileName);
bw.newLine();
}
另请注意,当我使用 replaceAll
从文件名中删除“.zip”时,.
必须进行转义。这是因为 replaceAll
的第一个参数是正则表达式,而点 .
是一个特殊字符。 [
也是如此。
有一种更紧凑的方法可以使用单个正则表达式执行相同的操作
for(File f : new File("").listFiles()) {
String fileName = f.getName();
fileName = fileName.replaceAll("\\.zip|\\[|]", "");
bw.write(fileName);
bw.newLine();
}
关于Java BufferedWriter 导出文件/目录列表 .replaceAll 替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43706758/