Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-递归删除父路径的文件和文件夹_Java_File - Fatal编程技术网

Java-递归删除父路径的文件和文件夹

Java-递归删除父路径的文件和文件夹,java,file,Java,File,我正在创建一个java程序,它采用父路径并删除给定路径中的所有文件和文件夹。我可以删除父文件夹中其他文件夹中的文件和文件夹的文件,但不能删除第三级文件夹 这是我的密码: package com.sid.trial; import java.util.List; import java.io.File; import java.util.ArrayList; public class DeleteFilesOfDirectoryWithFilters { public static

我正在创建一个java程序,它采用父路径并删除给定路径中的所有文件和文件夹。我可以删除父文件夹中其他文件夹中的文件和文件夹的文件,但不能删除第三级文件夹

这是我的密码:

package com.sid.trial;

import java.util.List;
import java.io.File;
import java.util.ArrayList;

public class DeleteFilesOfDirectoryWithFilters {

    public static void main(String[] args) {
        String parentPath = "D:\\tester";
        List<String> folderPaths =  deleteFiles(parentPath);
        deleteFolders(folderPaths);
    }

    public static void deleteFolders(List<String> folderPaths) {

        for(String path : folderPaths){
            File folder = new File(path);
            if(folder.delete())
                System.out.println("Folder "+folder.getName()+" Successfully Deleted.");
        }
    }

    public static List<String> deleteFiles(String path){
        File folder = new File(path);
        File[] files = folder.listFiles();
        List<String> folderPaths = new ArrayList<String>();
        String folderPath = path;
        if(files.length == 0){
            System.out.println("Directory is Empty or No FIles Available to Delete.");
        }
        for (File file : files) {
            if (file.isFile() && file.exists()) {
                file.delete();
                System.out.println("File "+file.getName()+" Successfully Deleted.");
            } else {
                if(file.isDirectory()){
                    folderPath = file.getAbsolutePath();
                    char lastCharacter = path.charAt(path.length()-1);
                    if(!(lastCharacter == '/' || lastCharacter == '\\')){

                        folderPath = folderPath.concat("\\");
                    }
                    /*folderPath = folderPath.concat(file.getName());*/
                    System.out.println(folderPath);
                    folderPaths.add(folderPath);
                }
            }
        }
        for(String directoryPath : folderPaths){
            List<String> processedFiles = new ArrayList<String>();
            processedFiles = deleteFiles(directoryPath);
            folderPaths.addAll(processedFiles);
        }
        return folderPaths;
    }

}
package com.sid.trial;
导入java.util.List;
导入java.io.File;
导入java.util.ArrayList;
公共类DeleteFilesOfDirectoryWithFilters{
公共静态void main(字符串[]args){
字符串parentPath=“D:\\tester”;
List folderpath=deleteFiles(parentPath);
删除文件夹(文件夹路径);
}
公共静态void deleteFolders(列出文件夹路径){
for(字符串路径:FolderPath){
文件夹=新文件(路径);
if(folder.delete())
System.out.println(“Folder”+Folder.getName()+“已成功删除”);
}
}
公共静态列表删除文件(字符串路径){
文件夹=新文件(路径);
File[]files=文件夹.listFiles();
List folderpath=new ArrayList();
字符串folderPath=path;
如果(files.length==0){
System.out.println(“目录为空或没有可删除的文件”);
}
用于(文件:文件){
if(file.isFile()&&file.exists()){
delete();
System.out.println(“文件”+File.getName()+“已成功删除”);
}否则{
if(file.isDirectory()){
folderPath=file.getAbsolutePath();
char lastCharacter=path.charAt(path.length()-1);
如果(!(lastCharacter=='/'| | lastCharacter=='\\')){
folderPath=folderPath.concat(“\\”);
}
/*folderPath=folderPath.concat(file.getName())*/
System.out.println(folderPath);
添加(folderPath);
}
}
}
for(字符串目录路径:FolderPath){
List processedFiles=new ArrayList();
processedFiles=deleteFiles(目录路径);
addAll(processedFiles);
}
返回折叠路径;
}
}
 > p>你应该考虑使用。它有一个FileUtils类,其方法deleteDirectory将递归删除

<强> > Apache CAMONS IO(如版本2.5)只为遗留代码“java > I.O.API(<代码>文件>代码>和朋友)提供,而不是java 7+代码> java .Nio< /Case> API(<代码>路径<代码>朋友)。它有一个FileUtils类,其方法deleteDirectory将递归删除


注意:Apache Commons IO(与2.5版一样)仅为遗留
java.IO
API(
File
和friends)提供实用程序,而不为java 7+
java.nio
API(
Path
和friends)提供实用程序。

您可以递归遍历文件夹并逐个删除每个文件。删除一个文件夹中的所有文件后,删除该文件夹。类似于以下代码的东西应该可以工作:

public void delete(File path){
    File[] l = path.listFiles();
    for (File f : l){
        if (f.isDirectory())
            delete(f);
        else
            f.delete();
    }
    path.delete(); 
}

您可以递归遍历文件夹并逐个删除每个文件。删除一个文件夹中的所有文件后,删除该文件夹。类似于以下代码的东西应该可以工作:

public void delete(File path){
    File[] l = path.listFiles();
    for (File f : l){
        if (f.isDirectory())
            delete(f);
        else
            f.delete();
    }
    path.delete(); 
}

您可以执行以下操作,递归比需要的时间长

public static void deleteFiles (File file){    
    if(file.isDirectory()){
        File[] files = file.listFiles();   //All files and sub folders
        for(int x=0; files != null && x<files.length; x++)
            deleteFiles(files[x]);          
    }
    else
        file.delete();      
}
publicstaticvoiddeletefiles(文件文件){
if(file.isDirectory()){
File[]files=File.listFiles();//所有文件和子文件夹

对于(intx=0;文件!=null&&x您可以执行以下操作,您的递归比需要的长

public static void deleteFiles (File file){    
    if(file.isDirectory()){
        File[] files = file.listFiles();   //All files and sub folders
        for(int x=0; files != null && x<files.length; x++)
            deleteFiles(files[x]);          
    }
    else
        file.delete();      
}
publicstaticvoiddeletefiles(文件文件){
if(file.isDirectory()){
File[]files=File.listFiles();//所有文件和子文件夹
对于(intx=0;文件!=null&&x您可以将“新”Java文件API与流API一起使用:

 Path dirPath = Paths.get( "./yourDirectory" );
 Files.walk( dirPath )
      .map( Path::toFile )
      .sorted( Comparator.comparing( File::isDirectory ) ) 
      .forEach( File::delete );
请注意,对
sorted()
方法的调用用于删除目录之前的所有文件

关于一条语句,并且没有任何第三方库;)

您可以将“新”Java文件API与流API一起使用:

 Path dirPath = Paths.get( "./yourDirectory" );
 Files.walk( dirPath )
      .map( Path::toFile )
      .sorted( Comparator.comparing( File::isDirectory ) ) 
      .forEach( File::delete );
请注意,对
sorted()
方法的调用用于删除目录之前的所有文件


大约一条语句,并且没有任何第三方库;)

这是一个练习吗?否则你可以看看commons io-FileUtils.cleanDirectory:@Siddharth看看下面我的解决方案。请不要要求读者为你做全部事情-Stack Overflow不是免费的编码服务。重点是人们愿意帮你实现你的目标,所以要愿意接受别人的ideas和建议,并根据您的用例修改它们。这是一种练习吗?否则您可以查看commons io-FileUtils.cleanDirectory:@Siddharth查看下面的解决方案。请不要要求读者为您完成全部工作-堆栈溢出不是免费的编码服务。重点是人们愿意帮助您为了实现您的目标,请愿意采纳他人的想法和建议,并将其修改到您的用例中。此代码非常新,感谢您的共享:)。您能解释一下吗?现在让我来看看如何打印所有文件和文件夹名,就像我在代码中使用流API和文件API一样。?
Files.walk()
将所有现有路径的流返回到目录中。
map()
将路径对象转换为文件对象,并且
forEach()
对每个对象应用某些内容。要在处理过程中打印文件路径,您可以将lambda展开为
forEach()
,只需添加一条语句:
forEach(File->{System.out.println(file);file.delete();});
这段代码真的很新,谢谢分享:)。你能解释一下吗?现在让我告诉你如何打印所有文件和文件夹名称,就像我在代码中使用file一样