Не удаляя файлы - PullRequest
2 голосов
/ 15 июня 2019

У меня есть этот метод здесь. Я хочу перечислить все файлы в определенной папке. Я хочу прочитать их все, и если в файле есть строка, содержащая более 5 символов, я хочу удалить ее. Что я делаю не так?

public void read() throws IOException {
    File[] fajllat = folder.listFiles((File f) -> f.isFile());
    int count = 0;
    String line = null;
    for (File file : fajllat) {
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);

        while ((line = br.readLine()) != null) {
            if (line.length() > 5) {
              count++;
              file.delete();
            }
        }
    }

    FileWriter fw = new FileWriter("C://Users//Admin//Desktop//foldtest123");
    BufferedWriter bw = new BufferedWriter(fw);
    try (PrintWriter pw = new PrintWriter(bw)) {
        pw.println(count);
        pw.close();
    }
}

Ответы [ 2 ]

1 голос
/ 15 июня 2019

Чтобы увидеть, что идет не так и файл не удаляется, используйте метод Files.delete(file.toPath()); вместо File#delete. java.nio.Files#delete метод выдаст исключение, и тогда вы сможете узнать ...

Также стоит прочитать: этот вопрос.

0 голосов
/ 15 июня 2019

Вы проверяете, используя логический результат file.delete (), удаляется файл или нет?Я думаю, ты должен сделать это.Кроме того, после удаления файла прервите цикл while и переходите к следующему файлу.Я изменил код, включая два приведенных выше вывода.

File directory = new File("XXXX/XXXX/XXXX/XXXX/");
    if(!directory.isDirectory()) {
        System.out.println("Given file is not a directory");
        return;
    }
    String line;
    int count = 0;
    File[] fileList = directory.listFiles(File::isFile);
    if(fileList != null && fileList.length > 0) {
        for (File file : fileList) {
            FileReader fr = new FileReader(file);
            BufferedReader br = new BufferedReader(fr);
            while ((line = br.readLine()) != null) {
                if (line.length() > 5) {
                    count++;
                    boolean wasFileDeleted = file.delete();
                    if(wasFileDeleted) {
                        System.out.println("The file "+file.getName()+" was deleted");
                    } else {
                        System.out.println("The file "+file.getName()+" deletion did not succeed");
                    }
                    break;
                }
            }
        }
    }
    System.out.println("A total of "+count+" files were deleted");

Я смог удалить все файлы в каталоге, используя тот же код, который вы используете.Это было в макинтош.Пожалуйста, напишите, если вы получаете какие-либо ошибки при удалении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...