美文网首页java
java代码删除文件夹

java代码删除文件夹

作者: android_Pie | 来源:发表于2020-04-23 11:44 被阅读0次

    java用代码删除文件夹

    import java.io.File;
    public class DeleteThread extends Thread {
        File[] files;
        String filesname;
        public DeleteThread(File[] files, String name) {
            this.filesname = name;
            this.files = files;
        }
        @Override
        public void run() {
            for (int i = 0; i < files.length; i++) {
                try {
                    this.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if ((files[i].isFile() || files[i].isHidden()) && files[i].getName().equals(filesname)) {
                    if (files[i].delete()) {
                    } else if (files[i].isDirectory()) {
                        File file = new File(files[i].getAbsolutePath());
                        DeleteThread t = new DeleteThread(file.listFiles(), filesname);
                        t.start();
                    }
                }
                //super.run();
            }
    
        }
    
    在java中,可以使用InputStream对文件进行读取,就是字节流的输入。当读取文件内容进程序时,需要使用一个byte数组来进行存储,如此会有如下两个问题:
    1.如何建立合适大小的byte数组,如果已知输入流的大小。
    2.如果不知输入流的大小,则肯定需要建立一个很大的byte数组,那么byte中很可能有空的内容,那么如何正确合适的将byte数组的中的内容输出?
    先看第一个问题:解决之道就是获取输入流的大小,创建此大小的byte数组。代码如下:view plaincopy to clipboardprint?
    //使用InputStream从文件中读取数据,在已知文件大小的情况下,建立合适的存储字节数组   
    import java.io.File;   
    import java.io.InputStream;   
    import java.io.FileInputStream;   
    public class InputStreamDemo01   
    {   
        public static void main(String args[])throws Exception{   
            File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");   
            InputStream in = new FileInputStream(f);   
            byte b[]=new byte[(int)f.length()];     //创建合适文件大小的数组   
            in.read(b);    //读取文件中的内容到b[]数组   
            in.close();   
            System.out.println(new String(b));   
        }   
    }  
    //使用InputStream从文件中读取数据,在已知文件大小的情况下,建立合适的存储字节数组
    import java.io.File;
    import java.io.InputStream;
    import java.io.FileInputStream;
    public class InputStreamDemo01
    {
     public static void main(String args[])throws Exception{
      File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");
      InputStream in = new FileInputStream(f);
      byte b[]=new byte[(int)f.length()];     //创建合适文件大小的数组
      in.read(b);    //读取文件中的内容到b[]数组
      in.close();
      System.out.println(new String(b));
     }
    }
    第二个问题:问题的解决之道就是获得输入流何时结束,它在byte中的尾索引位置。可以通过read()方法实现,read()返回读取的字节内容,当内容为空时返回-1。利用此特征可以解决第二个问题。代码如下:
    view plaincopy to clipboardprint?
    //同过判断文件的结尾来读取文件   
    import java.io.File;   
    import java.io.InputStream;   
    import java.io.FileInputStream;   
    public class InputStreamDemo02   
    {   
        public static void main(String args[]) throws Exception{   
            File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");   
            InputStream in = new FileInputStream(f);   
            byte b[] = new byte[1024];   
            int len = 0;   
            int temp=0;          //所有读取的内容都使用temp接收   
            while((temp=in.read())!=-1){    //当没有读取完时,继续读取   
                b[len]=(byte)temp;   
                len++;   
            }   
            in.close();   
            System.out.println(new String(b,0,len));   
        }   
    }
    
    
    
    在java中,可以使用InputStream对文件进行读取,就是字节流的输入。当读取文件内容进程序时,需要使用一个byte数组来进行存储,如此会有如下两个问题:
    1.如何建立合适大小的byte数组,如果已知输入流的大小。
    2.如果不知输入流的大小,则肯定需要建立一个很大的byte数组,那么byte中很可能有空的内容,那么如何正确合适的将byte数组的中的内容输出?
    先看第一个问题:解决之道就是获取输入流的大小,创建此大小的byte数组。代码如下:view plaincopy to clipboardprint?
    //使用InputStream从文件中读取数据,在已知文件大小的情况下,建立合适的存储字节数组   
    import java.io.File;   
    import java.io.InputStream;   
    import java.io.FileInputStream;   
    public class InputStreamDemo01   
    {   
        public static void main(String args[])throws Exception{   
            File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");   
            InputStream in = new FileInputStream(f);   
            byte b[]=new byte[(int)f.length()];     //创建合适文件大小的数组   
            in.read(b);    //读取文件中的内容到b[]数组   
            in.close();   
            System.out.println(new String(b));   
        }   
    }  
    //使用InputStream从文件中读取数据,在已知文件大小的情况下,建立合适的存储字节数组
    import java.io.File;
    import java.io.InputStream;
    import java.io.FileInputStream;
    public class InputStreamDemo01
    {
     public static void main(String args[])throws Exception{
      File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");
      InputStream in = new FileInputStream(f);
      byte b[]=new byte[(int)f.length()];     //创建合适文件大小的数组
      in.read(b);    //读取文件中的内容到b[]数组
      in.close();
      System.out.println(new String(b));
     }
    }
    第二个问题:问题的解决之道就是获得输入流何时结束,它在byte中的尾索引位置。可以通过read()方法实现,read()返回读取的字节内容,当内容为空时返回-1。利用此特征可以解决第二个问题。代码如下:
    view plaincopy to clipboardprint?
    //同过判断文件的结尾来读取文件   
    import java.io.File;   
    import java.io.InputStream;   
    import java.io.FileInputStream;   
    public class InputStreamDemo02   
    {   
        public static void main(String args[]) throws Exception{   
            File f = new File("E:"+File.separator+"java2"+File.separator+"StreamDemo"+File.separator+"test.txt");   
            InputStream in = new FileInputStream(f);   
            byte b[] = new byte[1024];   
            int len = 0;   
            int temp=0;          //所有读取的内容都使用temp接收   
            while((temp=in.read())!=-1){    //当没有读取完时,继续读取   
                b[len]=(byte)temp;   
                len++;   
            }   
            in.close();   
            System.out.println(new String(b,0,len));   
        }   
    }
    
    
    
    String path=sourceData.get(localDataBrowser.focusPosition).getPath();
                                File file = new File(path);
                                file.setExecutable(true,false);
                                file.setReadable(true,false);
                                file.setWritable(true,false);
                                recurDelete(file);
    
    public static void recurDelete(File f){
            if(!f.exists())return;
            if(f.isFile()){
                f.delete();
                return;
                }
            File[] files=f.listFiles();
            for(int i= 0;i < files.length; i++){
                recurDelete(files[i]);
            }
            f.delete();
            
            
            /*if(f.isFile() || f.list().length == 0){
                f.delete();
            }
            for(File fi:f.listFiles()){
                if(fi.isDirectory()){
                    recurDelete(fi);
                }
                else{
                    fi.delete();
                }
            }
            f.delete();*/
        }
    
    
    
    
    import java.io.File;
    public class DeleteDirectory {
        /**
         * 删除空目录
         * @param dir 将要删除的目录路径
         */
        private static void doDeleteEmptyDir(String dir) {
            boolean success = (new File(dir)).delete();
            if (success) {
                System.out.println("Successfully deleted empty directory: " + dir);
            } else {
                System.out.println("Failed to delete empty directory: " + dir);
            }
        }
    
        /**
         * 递归删除目录下的所有文件及子目录下所有文件
         * @param dir 将要删除的文件目录
         * @return boolean Returns "true" if all deletions were successful.
         *                 If a deletion fails, the method stops attempting to
         *                 delete and returns "false".
         */
        private static boolean deleteDir(File dir) {
            if (dir.isDirectory()) {
                String[] children = dir.list();
           //递归删除目录中的子目录下
                for (int i=0; i<children.length; i++) {
                    boolean success = deleteDir(new File(dir, children[i]));
                    if (!success) {
                        return false;
                    }
                }
            }
            // 目录此时为空,可以删除
            return dir.delete();
        }
        /**
         *测试
         */
        public static void main(String[] args) {
            doDeleteEmptyDir("new_dir1");
            String newDir2 = "new_dir2";
            boolean success = deleteDir(new File(newDir2));
            if (success) {
                System.out.println("Successfully deleted populated directory: " + newDir2);
            } else {
                System.out.println("Failed to delete populated directory: " + newDir2);
            }     
        }
    }
    
    
    
    /**
         * 遍历删除SD卡中某一文件夹下的指定子文件夹及其子文件
         */
        
        private String filePath = Environment.getExternalStorageDirectory()
                .getAbsolutePath()+"/ttpod"; //SD卡中“天天动听”文件夹目录
        private String[] fileName = new String[] { "song", "art", 
                "lyric"}; //删除ttpod文件夹下的三个文件夹及其子文件
        
        private void deleteAllFiles(String filePath,String[] fileName){
            File f=new File(filePath);
            if(f.exists()){
                for(int i=0;i<fileName.length;i++){
                    File file=new File(filePath+"/"+fileName[i]);
                    clear(file);
                }
                Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(this, "文件不存在",Toast.LENGTH_SHORT).show();
            }
        }
        
        /** 若将整个ttpod文件夹删除,则只需调用这个方法 */
        private void clear(File file) {
            if (file.exists()) { //指定文件是否存在
                if (file.isFile()) { //该路径名表示的文件是否是一个标准文件
                    file.delete(); //删除该文件
                } else if (file.isDirectory()) { //该路径名表示的文件是否是一个目录(文件夹)
                    File[] files = file.listFiles(); //列出当前文件夹下的所有文件
                    for (File f : files) {
                        clear(f); //递归删除
                        //Log.d("fileName", f.getName()); //打印文件名
                    }
                }
                file.delete(); //删除文件夹(song,art,lyric)
            } 
        }
    
    
    
    
    
    import java.io.File;
    /**
     * 操作文件帮助类
     * @author sRoger.
     */
    public final class OperationFileHelper {
        /**
         * 递归删除文件和文件夹
         * @param file    要删除的根目录
         */
        public static void RecursionDeleteFile(File file){
            if(file.isFile()){
                file.delete();
                return;
            }
            if(file.isDirectory()){
                File[] childFile = file.listFiles();
                if(childFile == null || childFile.length == 0){
                    file.delete();
                    return;
                }
                for(File f : childFile){
                    RecursionDeleteFile(f);
                }
                file.delete();
            }
        }
    }
    
    public static void copyFile(String from, String to) {
            int bytesum = 0;
            try {
                Runtime runtime = Runtime.getRuntime();
                runtime.exec("su");
                runtime.exec("mount -o remount,rw /system");
                runtime.exec("chmod 777 "+"/system");
                File oldfile = new File(from);
               
                if(oldfile.exists()){
                    
                    runtime.exec("chmod 777 "+ from);
                    InputStream inStream = new FileInputStream(from);
                    FileOutputStream fs = new FileOutputStream(to);
                    byte[] buffer = new byte[1444];
                    while (true) {
                        int byteread = inStream.read(buffer);
                        if (byteread != -1) {
                            bytesum += byteread;
                            fs.write(buffer, 0, byteread);
                        } else {
                            inStream.close();
                            return;
                        }
                    }
                }
                
            } catch (Exception e) {
                e.printStackTrace();
           
    

    相关文章

      网友评论

        本文标题:java代码删除文件夹

        本文链接:https://www.haomeiwen.com/subject/ropoihtx.html