Java 不删除接受条件的文件(递归)

Java 不删除接受条件的文件(递归),java,Java,这段代码有什么问题,我想递归读取文件夹中的所有文件,以检查它们是否包含特定的单词,并检查它们是否可写,如果它们接受此条件,我想删除它们 public void del(String text) throws IOException { if (UtilityClass.isEmpty(text)) { throw new IOException("Teksti null"); } int count = del(folder, text); tr

这段代码有什么问题,我想递归读取文件夹中的所有文件,以检查它们是否包含特定的单词,并检查它们是否可写,如果它们接受此条件,我想删除它们

public void del(String text) throws IOException {
    if (UtilityClass.isEmpty(text)) {
        throw new IOException("Teksti null");
    }
    int count = del(folder, text);

    try (FileWriter fw = new FileWriter("C://Users//Admin//Desktop//deletewriteout")) {

        fw.write(
                "Ne totalin u fshine : " + count + " file-a te cilet ishin te shkrushem dhe qe permabin : " + text);
        fw.flush();
    }
}

private int del(File file, String text) throws IOException {
    int counter = 0;
    String line = null;
    File[] fajllat = file.listFiles((File f) -> f.isFile() && f.canRead());
    for (File f : fajllat) {
        FileReader fr = new FileReader(f);
        BufferedReader br = new BufferedReader(fr);
        while ((line = br.readLine()) != null) {
            if (line.contains(text)) {
                f.delete();
                counter++;
            }

            else if (f.isDirectory()) {
                counter += del(f, text);
            }

        }
    }
    return counter;
}

您需要在删除文件之前关闭输入流

private int del(File file, String text) throws IOException {
    int counter = 0;
    String line = null;
    File[] fajllat = file.listFiles((File f) -> f.isFile() && f.canRead());
    for (File f : fajllat) {
        FileReader fr = new FileReader(f);
        BufferedReader br = new BufferedReader(fr);
        while ((line = br.readLine()) != null) {
            if (line.contains(text)) {

                // => Added
                br.close();// We need to close read stream before delete


                f.delete();
                counter++;
            }

            else if (f.isDirectory()) {
                counter += del(f, text);
            }

        }
    }
    return counter;
}

请参阅。

此代码是否有效?我对此表示怀疑。1.如果文件是一个目录,你不应该尝试读取它,甚至不应该首先打开它。2、你没有在任何地方关闭文件,更不用说在试图删除它之前,所以它永远无法工作。3.由于您仅在
isFile()
为真时才接受该文件,
isDirectory()
永远不可能为真,因此您将永远不会重复。复制者仍需要关闭该文件。此代码将泄漏文件描述符。