Java 删除除具有视频扩展名的文件外的所有文件
我正在尝试从不是视频文件的目录(及其子目录,非常重要)中删除每个文件。以下是我的ProcessDirectory类:Java 删除除具有视频扩展名的文件外的所有文件,java,Java,我正在尝试从不是视频文件的目录(及其子目录,非常重要)中删除每个文件。以下是我的ProcessDirectory类: public class ProcessDirectory { private File directory; public static final String [] MOVIE_EXTENSIONS = {"avi", "mp4", "flv", "mkv"}; public ProcessDirectory(String path) { this.direct
public class ProcessDirectory {
private File directory;
public static final String [] MOVIE_EXTENSIONS = {"avi", "mp4", "flv", "mkv"};
public ProcessDirectory(String path) {
this.directory = new File(path);
}
private Collection<File> findMovieFiles() throws IOException {
System.out.println("Getting all .avi, .mp4 files in " + this.directory.getCanonicalPath()
+ " including those in subdirectories");
Collection<File> videoFiles = FileUtils.listFiles(this.directory, MOVIE_EXTENSIONS, true);
return videoFiles;
}
public void removeAllNonMovieFiles() throws IOException {
Collection<File> movieFiles = findMovieFiles();
Collection<File> allFilesAndFolders = FileUtils.listFilesAndDirs(this.directory, TrueFileFilter.TRUE, TrueFileFilter.TRUE);
// have to use Iterator because otherwise it throws ConcurrentModificationException
Iterator<File> iter = allFilesAndFolders.iterator();
while (iter.hasNext()) {
File currentElement = iter.next();
if (!movieFiles.contains(currentElement)) {
iter.remove();
}
}
}
它似乎不起作用-没有文件被删除。我的两个收藏都经过了很好的检查,都使用System.out进行了检查,并且它们都有正确的文件,但是它们没有删除任何内容
编辑:更改了我的代码,我认为它现在看起来更好了,但仍然不起作用。iter.remove()
只是从集合中删除文件。您缺少实际删除文件的部分,如文件。删除或类似内容
你知道java.nio.file.Files
?使用它,您甚至可以编写如下代码:
Files.walk(Paths.get("your path here"))
.filter(isNotAMovieFile())
.forEach(delete());
这样,您只需要实现谓词isNotAMovieFile()
和使用者删除()
,这应该非常简单。在视频文件前后添加一些日志(或System.out)。removeIf
查看此集合的大小。您将看到视频文件
的设置是否正确。如果您仍有兴趣帮助我,我将更改代码:)但现在,您不再有以前代码中存在的文件。delete()
。如果添加currentElement.delete(),会发生什么代码>就在iter.remove()之前代码>?在调试模式下,是否尝试查看是否在if
语句中输入?我认为该集合类似于实际文件的图像1:1,但实际上类似于从这些对象解析的名称?例如,如果我想重命名一些文件,我不能只执行Collection.rename,而是必须使用files.rename或其他一些实际与文件交互的函数来访问它们。集合包含表示实际文件的文件对象。集合只是一个通用容器,可以包含任何对象。因此,除了从集合中删除对象之外,集合无法知道它在删除时应该做什么。
Files.walk(Paths.get("your path here"))
.filter(isNotAMovieFile())
.forEach(delete());