java

java代码删除文件夹

2020-04-23  本文已影响0人  android_Pie

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();
       
上一篇下一篇

猜你喜欢

热点阅读