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()
永远不可能为真,因此您将永远不会重复。复制者仍需要关闭该文件。此代码将泄漏文件描述符。