Java BufferedWriter导出文件/目录列表.replaceAll替代?

时间:2017-04-30 13:10:35

标签: java file filewriter bufferedwriter replaceall

使用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< -trying to remove" ["和"]"将名称保存到文件时。

filename.zip< -trying to remove" .zip"将名称保存到文件时。

directoryname1

directoryname2

(保留原始文件和目录名称,仅更改保存到文件的结果。)

必需的文字文件输出

name1.doc

文件名

directoryname1

directoryname2

1 个答案:

答案 0 :(得分: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();
}