จะลบทั้งโฟลเดอร์และเนื้อหาได้อย่างไร?


187

ฉันต้องการให้ผู้ใช้แอปพลิเคชันของฉันสามารถลบโฟลเดอร์ DCIM (ซึ่งอยู่ในการ์ด SD และมีโฟลเดอร์ย่อย)

เป็นไปได้ไหมถ้าเป็นเช่นนั้น


1
นอกเหนือจากวิธีการลบจากล่างขึ้นบนแบบเรียกซ้ำ?
Sarwar Erfan

หากคุณมีไดเรกทอรีขนาดใหญ่มากหรือซับซ้อนคุณควรใช้แทนrm -rf directory FileUtils.deleteDirectoryหลังจากการเปรียบเทียบเราพบว่ามันเร็วขึ้นหลายเท่า ดูตัวอย่างการใช้งานได้ที่นี่: stackoverflow.com/a/58421350/293280
Joshua Pinter

คำตอบ:


301

ให้ฉันบอกคุณก่อนสิ่งที่คุณไม่สามารถลบโฟลเดอร์ DCIM เพราะมันเป็นโฟลเดอร์ระบบ เมื่อคุณลบด้วยตนเองทางโทรศัพท์มันจะลบเนื้อหาของโฟลเดอร์นั้น แต่ไม่ใช่โฟลเดอร์ DCIM คุณสามารถลบเนื้อหาโดยใช้วิธีการด้านล่าง:

อัปเดตตามความคิดเห็น

File dir = new File(Environment.getExternalStorageDirectory()+"Dir_name_here"); 
if (dir.isDirectory()) 
{
    String[] children = dir.list();
    for (int i = 0; i < children.length; i++)
    {
       new File(dir, children[i]).delete();
    }
}

3
ก่อนหน้าฉันจะประกาศว่า dir คืออะไร?
เริ่มต้น

โดยทั่วไปฉันพยายามที่จะลบภาพถ่ายทั้งหมดดังนั้นไม่สำคัญว่า DCIM จะไม่ถูกลบตราบใดที่ภาพถ่ายนั้น ... ดังนั้นแม้กระทั่งการลบ 100MEDIA โฟลเดอร์ภายในสิ่งนี้จะทำงาน
Beginner

1
คุณต้องประกาศไดเรกทอรีโดยใช้เส้นทางของโฟลเดอร์ dicm: ใช้ไฟล์ r = file (เส้นทาง);
chikka.anddev

3
ใช้ไฟล์ dir = ไฟล์ใหม่ (Environment.getExternalStorageDirectory () + "/ DCIM / 100MEDIA");
เริ่มต้น

1
@chiragshah หลังจากลบโฟลเดอร์และสร้างโฟลเดอร์ใหม่ทำให้เกิดการสร้างไฟล์ที่ไม่รู้จักด้วยชื่อโฟลเดอร์เดียวกันที่กล่าวถึงและถ้าฉันพยายามเข้าถึงไฟล์นั้นมันกำลังโยนข้อยกเว้นเช่นทรัพยากรหรืออุปกรณ์ไม่ว่างฉันตรวจสอบคุณสมบัติของ ไฟล์ที่ฉันพบMD5 ลายเซ็น: Operation Failure
sha

529

คุณสามารถลบไฟล์และโฟลเดอร์แบบนี้ซ้ำ:

void deleteRecursive(File fileOrDirectory) {
    if (fileOrDirectory.isDirectory())
        for (File child : fileOrDirectory.listFiles())
            deleteRecursive(child);

    fileOrDirectory.delete();
}

21
ฉันไม่ได้ทำการทดสอบประสิทธิภาพ แต่ฉันเชื่อว่าของฉันแข็งแกร่งกว่า chirag's จะทำงานกับกรณีเฉพาะของโฟลเดอร์ DCIM โดยที่โฟลเดอร์ภายใน DCIM ควรมีเฉพาะไฟล์ (เช่นโฟลเดอร์ภายใน DCIM ไม่ปกติมีโฟลเดอร์ย่อยใด ๆ ) เวอร์ชันของฉันจะลบโฟลเดอร์ที่ซ้อนอยู่ในระดับความลึกใด ๆ มีโอกาสที่ผู้ใช้จะแก้ไขเนื้อหาของการ์ด SD ของเขาเพื่อให้ DCIM มีโฟลเดอร์ซ้อนกันอย่างลึกซึ้งยิ่งขึ้น (เช่นDCIM\foo\bar\pic.jpg) ซึ่งในกรณีนี้รหัสของ chirag จะล้มเหลว
teedyay

2
คำถามที่เพื่อนร่วมงานถามฉัน: จะเกิดอะไรขึ้นถ้าโฟลเดอร์มีลิงก์สัญลักษณ์ในตัวเองและคุณรันโค้ดอันนี้
p4u144

1
@ p4u144 ให้เพื่อนร่วมงานของคุณในระดับสูงสำหรับการเป็นอัจฉริยะ! เห็นดี! ความจริงแล้วฉันไม่รู้ว่ารหัสนี้จะเคารพและติดตามลิงก์สัญลักษณ์หรือไม่ แต่ถ้าเป็นเช่นนั้นคุณจะมีการวนซ้ำไม่สิ้นสุด คุณชอบที่จะทดสอบมันหรือไม่?
teedyay

8
@ p4u144 ไม่ต้องกังวลกับลิงค์สัญลักษณ์ "ด้วยลิงก์สัญลักษณ์ลิงก์จะถูกลบและไม่ใช่เป้าหมายของลิงก์" จากdocs.oracle.com/javase/tutorial/essential/io/delete.html
corbin

3
มี NPE ที่เป็นไปได้ที่นี่: fileOrDirectory.listFiles()อาจกลับมาnullหากมีข้อผิดพลาด I / O เมื่ออ่านไฟล์ มีการระบุไว้อย่างชัดเจนในเอกสารประกอบ: developer.android.com/reference/java/io/File.html#listFiles ()
Brian Yencho

67

เราสามารถใช้อาร์กิวเมนต์บรรทัดคำสั่งเพื่อลบทั้งโฟลเดอร์และเนื้อหา

public static void deleteFiles(String path) {

    File file = new File(path);

    if (file.exists()) {
        String deleteCmd = "rm -r " + path;
        Runtime runtime = Runtime.getRuntime();
        try {
            runtime.exec(deleteCmd);
        } catch (IOException e) { }
    }
}

ตัวอย่างการใช้งานโค้ดด้านบน:

deleteFiles("/sdcard/uploads/");

2
ดูดีคุณรู้หรือไม่ว่าสิ่งนี้เป็นแบบซิงโครนัสหรือแบบไม่ซิงค์ เอกสารไม่ได้พูดว่า: developer.android.com/reference/java/lang/…
คนอยู่ที่ไหนสักแห่ง

2
ความคิดที่ไม่ดี ทำไมทำบนเปลือก?
noamtm


34

ใน Kotlin คุณสามารถใช้deleteRecursively()ส่วนขยายจากkotlin.ioแพ็คเกจ

val someDir = File("/path/to/dir")
someDir.deleteRecursively()

2
ใน Java คุณสามารถใช้FilesKt.deleteRecursively(new File("/path/to/dir"));หากคุณใช้ kotlin-stdlib
Joonsoo

คำสั่งนี้จะลบไดเรกทอรี "/ dir" ด้วยเนื้อหาภายในหรือเพียงแค่เนื้อหาภายในไดเรกทอรี "/ dir" และไดเรกทอรียังคงอยู่ที่นั่นหรือไม่
Bhimbim

1
@Bhimbim lemme google docs สำหรับคุณ "ลบไฟล์นี้พร้อมกับไฟล์ย่อยทั้งหมด" ดังนั้นไดเรกทอรีจะถูกลบเช่นเดียวกับเนื้อหา
Dima Rostopira

ขอบคุณ @DimaRostopira!
Bhimbim

kotlin เพื่อช่วยเหลือ!
Tobi Oyelekan

15

ใช้วิธีการด้านล่างเพื่อลบไดเรกทอรีหลักทั้งหมดที่มีไฟล์และมันเป็นไดเรกทอรีย่อย หลังจากเรียกวิธีนี้อีกครั้งให้เรียกใช้ไดเรกทอรี delete () ของไดเรกทอรีหลักของคุณ

// For to Delete the directory inside list of files and inner Directory
public 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;
            }
        }
    }

    // The directory is now empty so delete it
    return dir.delete();
}

จากคำตอบทั้งหมดนี่คือคำตอบที่แท้จริงเท่านั้นซึ่งจะลบไดเรกทอรีด้วยหลังจากลบไฟล์ในนั้น
zeeshan

ไฟล์ไฟล์ = ไฟล์ใหม่ (Environment.getExternalStorageDirectory () + separator + "folder_name" + separator); deleteDir (ไฟล์) ใช่ทำงานได้ ขอบคุณ :)
ashishdhiman2007

14

วิธีการของคุณเหมาะสมสำหรับโฟลเดอร์ที่มีไฟล์เท่านั้น แต่หากคุณกำลังมองหาสถานการณ์ที่มีโฟลเดอร์ย่อยอยู่จำเป็นต้องทำการเรียกซ้ำ

นอกจากนี้คุณควรเก็บค่าส่งคืนของการส่งคืนเพื่อให้แน่ใจว่าคุณได้รับอนุญาตให้ลบไฟล์

และรวมถึง

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

ในรายการของคุณ

void DeleteRecursive(File dir)
{
    Log.d("DeleteRecursive", "DELETEPREVIOUS TOP" + dir.getPath());
    if (dir.isDirectory())
    {
        String[] children = dir.list();
        for (int i = 0; i < children.length; i++)
        {
            File temp = new File(dir, children[i]);
            if (temp.isDirectory())
            {
                Log.d("DeleteRecursive", "Recursive Call" + temp.getPath());
                DeleteRecursive(temp);
            }
            else
            {
                Log.d("DeleteRecursive", "Delete File" + temp.getPath());
                boolean b = temp.delete();
                if (b == false)
                {
                    Log.d("DeleteRecursive", "DELETE FAIL");
                }
            }
        }

    }
    dir.delete();
}

5
นี้อาจจะง่ายขึ้นถ้าคุณใช้สำหรับ (File currentFile: file.listFiles ()) {
ธ อร์เบน

8

มีคำตอบมากมาย แต่ฉันตัดสินใจเพิ่มของฉันเองเพราะมันแตกต่างกันเล็กน้อย มันขึ้นอยู่กับ OOP;)

ฉันสร้างคลาสDirectoryCleanerซึ่งช่วยฉันทุกครั้งที่ฉันต้องทำความสะอาดไดเรกทอรี

public class DirectoryCleaner {
    private final File mFile;

    public DirectoryCleaner(File file) {
        mFile = file;
    }

    public void clean() {
        if (null == mFile || !mFile.exists() || !mFile.isDirectory()) return;
        for (File file : mFile.listFiles()) {
            delete(file);
        }
    }

    private void delete(File file) {
        if (file.isDirectory()) {
            for (File child : file.listFiles()) {
                delete(child);
            }
        }
        file.delete();

    }
}

สามารถใช้เพื่อแก้ปัญหานี้ในวิธีถัดไป:

File dir = new File(Environment.getExternalStorageDirectory(), "your_directory_name");
new DirectoryCleaner(dir).clean();
dir.delete();

7

หากคุณไม่จำเป็นต้องลบสิ่งซ้ำ ๆ คุณสามารถลองทำสิ่งนี้:

File file = new File(context.getExternalFilesDir(null), "");
    if (file != null && file.isDirectory()) {
        File[] files = file.listFiles();
        if(files != null) {
            for(File f : files) {   
                f.delete();
            }
        }
    }

6

คุณไม่สามารถลบไดเรกทอรีหากมีไดเรกทอรีย่อยหรือไฟล์ใน Java ลองวิธีแก้ปัญหาง่ายๆสองบรรทัดนี้ จะเป็นการลบไดเรกทอรีและการแข่งขันภายในไดเรกทอรี

File dirName = new File("directory path");
FileUtils.deleteDirectory(dirName);

เพิ่มบรรทัดนี้ในไฟล์ gradle และซิงค์โครงการ

compile 'org.apache.commons:commons-io:1.3.2'  

ในฐานะที่เป็น 2 ซับมันง่าย แต่การติดตั้งไลบรารีทั้งหมดเพื่อใช้วิธีการอย่างใดอย่างหนึ่งดูเหมือนว่าจะไม่มีประสิทธิภาพ ใช้สิ่งนี้แทน
Kathir

ทิปแทรก gradle ช่วยชีวิตฉันไว้
Dracarys

5
public static void deleteDirectory( File dir )
{

    if ( dir.isDirectory() )
    {
        String [] children = dir.list();
        for ( int i = 0 ; i < children.length ; i ++ )
        {
         File child =    new File( dir , children[i] );
         if(child.isDirectory()){
             deleteDirectory( child );
             child.delete();
         }else{
             child.delete();

         }
        }
        dir.delete();
    }
}

5

ดู android.os.FileUtils ซ่อนอยู่บน API 21

public static boolean deleteContents(File dir) {
    File[] files = dir.listFiles();
    boolean success = true;
    if (files != null) {
        for (File file : files) {
            if (file.isDirectory()) {
                success &= deleteContents(file);
            }
            if (!file.delete()) {
                Log.w("Failed to delete " + file);
                success = false;
            }
        }
    }
    return success;
}

ที่มา: https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/os/FileUtils.java#414


4

ตามเอกสาร :

หากชื่อพา ธ นามธรรมนี้ไม่ได้หมายถึงไดเรกทอรีแล้ววิธีนี้จะส่งกลับ null

ดังนั้นคุณควรตรวจสอบว่าlistFilesมีnullและดำเนินการต่อหากไม่ได้

boolean deleteDirectory(File path) {
    if(path.exists()) {
        File[] files = path.listFiles();
        if (files == null) {
            return false;
        }
        for (File file : files) {
            if (file.isDirectory()) {
                deleteDirectory(file);
            } else {
                boolean wasSuccessful = file.delete();
                if (wasSuccessful) {
                    Log.i("Deleted ", "successfully");
                }
            }
        }
    }
    return(path.delete());
}

1
นี่ควรเป็นคำตอบที่ยอมรับได้ ทำงานเหมือนจับใจ!
MSeiz5

3

นี่คือสิ่งที่ฉันทำ ... (บทสรุปและทดสอบ)

    ...
    deleteDir(new File(dir_to_be_deleted));
    ...

    // delete directory and contents
    void deleteDir(File file) { 
        if (file.isDirectory())
            for (String child : file.list())
                deleteDir(new File(file, child));
        file.delete();  // delete child file or empty directory
    }

3
private static void deleteRecursive(File dir)
{
    //Log.d("DeleteRecursive", "DELETEPREVIOUS TOP" + dir.getPath());
    if (dir.isDirectory())
    {
        String[] children = dir.list();
        for (int i = 0; i < children.length; i++)
        {
            File temp = new File(dir, children[i]);
            deleteRecursive(temp);
        }

    }

    if (dir.delete() == false)
    {
        Log.d("DeleteRecursive", "DELETE FAIL");
    }
}

2

วิธีง่ายๆในการลบไฟล์ทั้งหมดจากไดเรกทอรี:

มันเป็นฟังก์ชั่นทั่วไปสำหรับลบภาพทั้งหมดจากไดเรกทอรีโดยการโทรเท่านั้น

deleteAllImageFile (บริบท);

public static void deleteAllFile(Context context) {
File directory = context.getExternalFilesDir(null);
        if (directory.isDirectory()) {
            for (String fileName: file.list()) {
                new File(file,fileName).delete();
            }
        }    
    } 

2

รหัสที่ปลอดภัยที่สุดที่ฉันรู้:

private boolean recursiveRemove(File file) {
    if(file == null  || !file.exists()) {
        return false;
    }

    if(file.isDirectory()) {
        File[] list = file.listFiles();

        if(list != null) {

            for(File item : list) {
                recursiveRemove(item);
            }

        }
    }

    if(file.exists()) {
        file.delete();
    }

    return !file.exists();
}

ตรวจสอบไฟล์ที่มีอยู่จัดการ nulls ตรวจสอบไดเรกทอรีที่ถูกลบจริง


2

รุ่น koltin สั้น

fun File.deleteDirectory(): Boolean {
    return if (exists()) {
        listFiles()?.forEach {
            if (it.isDirectory) {
                it.deleteDirectory()
            } else {
                it.delete()
            }
        }
        delete()
    } else false
}

1

นี่คือการใช้งานแบบไม่เรียกซ้ำเพื่อความสนุก:

/**
 * Deletes the given folder and all its files / subfolders.
 * Is not implemented in a recursive way. The "Recursively" in the name stems from the filesystem command
 * @param root The folder to delete recursively
 */
public static void deleteRecursively(final File root) {
    LinkedList<File> deletionQueue = new LinkedList<>();
    deletionQueue.add(root);

    while(!deletionQueue.isEmpty()) {
        final File toDelete = deletionQueue.removeFirst();
        final File[] children = toDelete.listFiles();
        if(children == null || children.length == 0) {
            // This is either a file or an empty directory -> deletion possible
            toDelete.delete();
        } else {
            // Add the children before the folder because they have to be deleted first
            deletionQueue.addAll(Arrays.asList(children));
            // Add the folder again because we can't delete it yet.
            deletionQueue.addLast(toDelete);
        }
    }
}

1

สิ่งนี้(พยายามลบไฟล์ย่อยและไดเรกทอรีย่อยทั้งหมดรวมถึงไดเรกทอรีที่ให้มาด้วย) :

  1. หากFileลบ
  2. หากEmpty Directoryลบ
  3. ถ้าNot Empty Directoryโทรลบอีกครั้งด้วยไดเรกทอรีย่อยทำซ้ำ 1 ถึง 3

ตัวอย่าง:

File externalDir = Environment.getExternalStorageDirectory()
Utils.deleteAll(externalDir); //BE CAREFUL.. Will try and delete ALL external storage files and directories

ในการเข้าถึงไดเรกทอรีที่จัดเก็บข้อมูลภายนอกคุณต้องมีสิทธิ์ต่อไปนี้:

(ใช้ContextCompat.checkSelfPermissionและActivityCompat.requestPermissions)

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

วิธีการเรียกซ้ำ:

public static boolean deleteAll(File file) {
    if (file == null || !file.exists()) return false;

    boolean success = true;
    if (file.isDirectory()) {
        File[] files = file.listFiles();
        if (files != null && files.length > 0) {
            for (File f : files) {
                if (f.isDirectory()) {
                    success &= deleteAll(f);
                }
                if (!f.delete()) {
                    Log.w("deleteAll", "Failed to delete " + f);
                    success = false;
                }
            }
        } else {
            if (!file.delete()) {
                Log.w("deleteAll", "Failed to delete " + file);
                success = false;
            }
        }
    } else {
        if (!file.delete()) {
            Log.w("deleteAll", "Failed to delete " + file);
            success = false;
        }
    }
    return success;
}

0

ฉันได้ใส่อันนี้ไว้แล้วแม้ว่ามันจะ 's paces มันลบโฟลเดอร์ที่มีโครงสร้างไดเรกทอรีใด ๆ

public int removeDirectory(final File folder) {

    if(folder.isDirectory() == true) {
        File[] folderContents = folder.listFiles();
        int deletedFiles = 0;

        if(folderContents.length == 0) {
            if(folder.delete()) {
                deletedFiles++;
                return deletedFiles;
            }
        }
        else if(folderContents.length > 0) {

            do {

                File lastFolder = folder;
                File[] lastFolderContents = lastFolder.listFiles();

                //This while loop finds the deepest path that does not contain any other folders
                do {

                    for(File file : lastFolderContents) {

                        if(file.isDirectory()) {
                            lastFolder = file;
                            lastFolderContents = file.listFiles();
                            break;
                        }
                        else {

                            if(file.delete()) {
                                deletedFiles++;
                            }
                            else {
                                break;
                            }

                        }//End if(file.isDirectory())

                    }//End for(File file : folderContents)

                } while(lastFolder.delete() == false);

                deletedFiles++;
                if(folder.exists() == false) {return deletedFiles;}

            } while(folder.exists());
        }
    }
    else {
        return -1;
    }

    return 0;

}

หวังว่านี่จะช่วยได้


0
//To delete all the files of a specific folder & subfolder
public static void deleteFiles(File directory, Context c) {
    try {
        for (File file : directory.listFiles()) {
            if (file.isFile()) {
                final ContentResolver contentResolver = c.getContentResolver();
                String canonicalPath;
                try {
                    canonicalPath = file.getCanonicalPath();
                } catch (IOException e) {
                    canonicalPath = file.getAbsolutePath();
                }
                final Uri uri = MediaStore.Files.getContentUri("external");
                final int result = contentResolver.delete(uri,
                        MediaStore.Files.FileColumns.DATA + "=?", new String[]{canonicalPath});
                if (result == 0) {
                    final String absolutePath = file.getAbsolutePath();
                    if (!absolutePath.equals(canonicalPath)) {
                        contentResolver.delete(uri,
                                MediaStore.Files.FileColumns.DATA + "=?", new String[]{absolutePath});
                    }
                }
                if (file.exists()) {
                    file.delete();
                    if (file.exists()) {
                        try {
                            file.getCanonicalFile().delete();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        if (file.exists()) {
                            c.deleteFile(file.getName());
                        }
                    }
                }
            } else
                deleteFiles(file, c);
        }
    } catch (Exception e) {
    }
}

นี่คือทางออกของคุณมันจะรีเฟรชแกลเลอรี่ด้วย


0

อีกวิธีหนึ่ง (ทันสมัย) ในการแก้ไข

public class FileUtils {
    public static void delete(File fileOrDirectory) {
        if(fileOrDirectory != null && fileOrDirectory.exists()) {
            if(fileOrDirectory.isDirectory() && fileOrDirectory.listFiles() != null) {      
                Arrays.stream(fileOrDirectory.listFiles())
                      .forEach(FileUtils::delete);
            }
            fileOrDirectory.delete();
        }
    }
}

บน Android ตั้งแต่ API 26

public class FileUtils {

    public static void delete(File fileOrDirectory)  {
        if(fileOrDirectory != null) {
            delete(fileOrDirectory.toPath());
        }
    }

    public static void delete(Path path)  {
        try {
            if(Files.exists(path)) {
                Files.walk(path)
                        .sorted(Comparator.reverseOrder())
                        .map(Path::toFile)
//                      .peek(System.out::println)
                        .forEach(File::delete);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

0

ฉันใช้ฟังก์ชันเรียกซ้ำนี้เพื่อทำงาน:

public static void deleteDirAndContents(@NonNull File mFile){
    if (mFile.isDirectory() && mFile.listFiles() != null && mFile.listFiles().length > 0x0) {
        for (File file : mFile.listFiles()) {
            deleteDirAndContents(file);
        }
    } else {
        mFile.delete();
    }
}

ฟังก์ชั่นตรวจสอบว่ามันเป็นไดเรกทอรีหรือไฟล์

ถ้ามันเป็นไดเรกทอรีตรวจสอบว่ามันมีไฟล์เด็กถ้ามันมีไฟล์เด็กจะเรียกตัวเองอีกครั้งผ่านเด็ก ๆ และทำซ้ำ

ถ้าเป็นไฟล์มันจะลบทิ้ง

(อย่าใช้ฟังก์ชั่นนี้เพื่อล้างแคชของแอพโดยส่งแคช dir เพราะมันจะลบแคช dir ด้วยดังนั้นแอปจะหยุดทำงาน ... หากคุณต้องการล้างแคชคุณใช้ฟังก์ชันนี้ที่จะไม่ลบ dir คุณผ่านไป:

public static void deleteDirContents(@NonNull File mFile){
        if (mFile.isDirectory() && mFile.listFiles() != null && mFile.listFiles().length > 0x0) {
            for (File file : mFile.listFiles()) {
                deleteDirAndContents(file);
            }
        }
    }

หรือคุณสามารถตรวจสอบว่ามันเป็นแคช dir โดยใช้:

if (!mFile.getAbsolutePath().equals(context.getCacheDir().getAbsolutePath())) {
    mFile.delete();
}

โค้ดตัวอย่างเพื่อล้างแคชแอป:

public static void clearAppCache(Context context){
        try {
            File cache = context.getCacheDir();
            FilesUtils.deleteDirContents(cache);
        } catch (Exception e){
            MyLogger.onException(TAG, e);
        }
    }

ลาก่อนขอให้มีความสุขในวันนี้และการเข้ารหัส: D

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.