删除目录(但不是目录)中的所有文件 – 一个class轮解决scheme
我想删除ABC目录中的所有文件。
当我尝试FileUtils.deleteDirectory(new File("C:/test/ABC/"));
它也删除文件夹ABC。
有没有一个单线解决scheme,我可以删除目录内的文件,但不是目录?
FileUtils.cleanDirectory(directory);
在同一个文件中有这个方法。 这也将recursion删除它们下面的所有子文件夹和文件。
文档: org.apache.commons.io.FileUtils.cleanDirectory
你的意思是?
for(File file: dir.listFiles()) if (!file.isDirectory()) file.delete();
这只会删除文件,而不是目录。
彼得·劳瑞的答案很好,因为它很简单,不依赖于任何特殊的东西,而是你应该这样做的方式。 如果您需要删除子目录及其内容,请使用recursion:
void purgeDirectory(File dir) { for (File file: dir.listFiles()) { if (file.isDirectory()) purgeDirectory(file); file.delete(); } }
要删除子目录及其内容(问题的一部分),请修改如下:
void purgeDirectoryButKeepSubDirectories(File dir) { for (File file: dir.listFiles()) { if (!file.isDirectory()) file.delete(); } }
或者,因为您想要一个单线解决scheme:
for (File file: dir.listFiles()) if (!file.isDirectory()) file.delete();
使用外部库来处理这样一个简单的任务不是一个好主意,除非你还需要这个库来处理别的东西,在这种情况下,最好使用现有的代码。 你似乎正在使用Apache库,所以使用它的FileUtils.cleanDirectory()
方法。
Java 8stream
这只会删除ABC中的文件(子目录不变):
Arrays.stream(new File("C:/test/ABC/").listFiles()).forEach(File::delete);
这只会删除ABC (和子目录)中的文件:
Files.walk(Paths.get("C:/test/ABC/")) .filter(Files::isRegularFile) .map(Path::toFile) .forEach(File::delete);
^这个版本需要处理IOException
或者在Java 8中使用它:
try { Files.newDirectoryStream( directory ).forEach( file -> { try { Files.delete( file ); } catch ( IOException e ) { throw new UncheckedIOException(e); } } ); } catch ( IOException e ) { e.printStackTrace(); }
可惜的是,exception处理是如此庞大,否则将是一个单线…
public class DeleteFile { public static void main(String[] args) { String path="D:\test"; File file = new File(path); File[] files = file.listFiles(); for (File f:files) {if (f.isFile() && f.exists) { f.delete(); system.out.println("successfully deleted"); }else{ system.out.println("cant delete a file due to open or error"); } } }}
从目录删除所有文件说“C:\示例”
File file = new File("C:\\Example"); String[] myFiles; if(file.isDirectory()){ myFiles = file.list(); for (int i=0; i<myFiles.length; i++) { File myFile = new File(file, myFiles[i]); myFile.delete(); } }
package com; import java.io.File; public class Delete { public static void main(String[] args) { String files; File file = new File("D:\\del\\yc\\gh"); File[] listOfFiles = file.listFiles(); for (int i = 0; i < listOfFiles.length; i++) { if (listOfFiles[i].isFile()) { files = listOfFiles[i].getName(); System.out.println(files); if(!files.equalsIgnoreCase("Scan.pdf")) { boolean issuccess=new File(listOfFiles[i].toString()).delete(); System.err.println("Deletion Success "+issuccess); } } } } }
如果你想删除所有文件删除
if(!files.equalsIgnoreCase("Scan.pdf"))
声明它将工作。