我想刪除一個目錄中的所有文件(和它的子目錄中,很重要的),這是不是一個視頻file.Here是我ProcessDirectory類:刪除所有文件,但那些視頻擴展
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();
}
}
}
}
而這裏就是我所說的方法:
String path = "/run/media/michal/F04AA6E24AA6A536/Filmy/FilmyTest/";
ProcessDirectory directory = new ProcessDirectory(path);
try {
directory.removeAllNonMovieFiles();
} catch (IOException e) {
e.printStackTrace();
}
這似乎並沒有工作 - 沒有文件被刪除。我的兩個集合都很好 - 用System.out檢查了它們,並且它們都有正確的文件,但是它們沒有刪除任何內容。
編輯:改變了我的代碼,我認爲現在看起來更好,但仍然無法正常工作。
在'videoFiles.removeIf'之前和之後添加一些日誌(或System.out)來查看此Collection的大小。你會看到'videoFiles'是否設置正確。 –
我改變了我的代碼,如果你仍然有興趣幫助我:) – doublemc
但現在,你不再有'file.delete()',這是存在於你以前的代碼。如果在'iter.remove();'之前添加'currentElement.delete();'會發生什麼?在調試模式下,您是否嘗試查看是否輸入了「if」語句? –