Mr.*_*r.G 95 java file-io delete-directory
我想使用Java创建和删除目录,但它无法正常工作.
File index = new File("/home/Work/Indexer1");
if (!index.exists()) {
index.mkdir();
} else {
index.delete();
if (!index.exists()) {
index.mkdir();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 162
只是一个班轮.
import org.apache.commons.io.FileUtils;
FileUtils.deleteDirectory(new File(destination));
Run Code Online (Sandbox Code Playgroud)
文档在这里
Jef*_*man 91
这是有效的,虽然跳过目录测试看起来效率低,但它不是:测试立即发生listFiles()
.
void deleteDir(File file) {
File[] contents = file.listFiles();
if (contents != null) {
for (File f : contents) {
deleteDir(f);
}
}
file.delete();
}
Run Code Online (Sandbox Code Playgroud)
更新,以避免遵循符号链接:
void deleteDir(File file) {
File[] contents = file.listFiles();
if (contents != null) {
for (File f : contents) {
if (! Files.isSymbolicLink(f.toPath())) {
deleteDir(f);
}
}
}
file.delete();
}
Run Code Online (Sandbox Code Playgroud)
小智 89
Java无法删除包含数据的文件夹.您必须在删除文件夹之前删除所有文件.
使用类似的东西:
String[]entries = index.list();
for(String s: entries){
File currentFile = new File(index.getPath(),s);
currentFile.delete();
}
Run Code Online (Sandbox Code Playgroud)
然后你应该能够使用index.delete()
未经测试删除该文件夹!
And*_*hev 23
在JDK 7中,您可以使用Files.walkFileTree()
和Files.deleteIfExists()
删除文件树.
在JDK 6中,一种可能的方法是从Apache Commons中使用FileUtils.deleteQuietly,它将删除文件,目录或带有文件和子目录的目录.
nir*_*mal 20
我更喜欢java 8上的这个解决方案:
Files.walk(pathToBeDeleted)
.sorted(Comparator.reverseOrder())
.map(Path::toFile)
.forEach(File::delete);
Run Code Online (Sandbox Code Playgroud)
从这个网站:http://www.baeldung.com/java-delete-directory
JRA*_*TLL 19
使用Apache Commons-IO,它遵循单行:
import org.apache.commons.io.FileUtils;
FileUtils.forceDelete(new File(destination));
Run Code Online (Sandbox Code Playgroud)
这比(稍微)更高效FileUtils.deleteDirectory
.
小智 9
我的基本递归版本,使用旧版本的JDK:
public static void deleteFile(File element) {
if (element.isDirectory()) {
for (File sub : element.listFiles()) {
deleteFile(sub);
}
}
element.delete();
}
Run Code Online (Sandbox Code Playgroud)
小智 9
另一种选择是使用 Spring 的org.springframework.util.FileSystemUtils
相关方法,它将递归删除目录的所有内容。
File directoryToDelete = new File(<your_directory_path_to_delete>);
FileSystemUtils.deleteRecursively(directoryToDelete);
Run Code Online (Sandbox Code Playgroud)
这将完成工作!
这是最佳解决方案Java 7+
:
public static void deleteDirectory(String directoryFilePath) throws IOException
{
Path directory = Paths.get(directoryFilePath);
if (Files.exists(directory))
{
Files.walkFileTree(directory, new SimpleFileVisitor<Path>()
{
@Override
public FileVisitResult visitFile(Path path, BasicFileAttributes basicFileAttributes) throws IOException
{
Files.delete(path);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path directory, IOException ioException) throws IOException
{
Files.delete(directory);
return FileVisitResult.CONTINUE;
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
如前所述,Java无法删除包含文件的文件夹,因此先删除文件,然后再删除文件夹。
这是执行此操作的一个简单示例:
import org.apache.commons.io.FileUtils;
// First, remove files from into the folder
FileUtils.cleanDirectory(folder/path);
// Then, remove the folder
FileUtils.deleteDirectory(folder/path);
Run Code Online (Sandbox Code Playgroud)
要么:
FileUtils.forceDelete(new File(destination));
Run Code Online (Sandbox Code Playgroud)
番石榴21+救援。仅当没有符号链接指向要删除的目录时才使用。
com.google.common.io.MoreFiles.deleteRecursively(
file.toPath(),
RecursiveDeleteOption.ALLOW_INSECURE
) ;
Run Code Online (Sandbox Code Playgroud)
(此问题已由Google很好地索引,因此其他人usig Guava可能很乐意找到此答案,即使它与其他地方的其他答案是多余的。)
我最喜欢这个解决方案。它不使用第3方库,而是使用Java 7的NIO2 。
/**
* Deletes Folder with all of its content
*
* @param folder path to folder which should be deleted
*/
public static void deleteFolderAndItsContent(final Path folder) throws IOException {
Files.walkFileTree(folder, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Files.delete(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
if (exc != null) {
throw exc;
}
Files.delete(dir);
return FileVisitResult.CONTINUE;
}
});
}
Run Code Online (Sandbox Code Playgroud)
小智 5
你可以试试这个
public static void deleteDir(File dirFile) {
if (dirFile.isDirectory()) {
File[] dirs = dirFile.listFiles();
for (File dir: dirs) {
deleteDir(dir);
}
}
dirFile.delete();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
233135 次 |
最近记录: |