หน้าเว็บ

วันจันทร์ที่ 9 กรกฎาคม พ.ศ. 2555

delete directory ด้วย FileUtils Apache Commons


        ปกติถ้าเราต้องการลบไดเร็คทอรี(โฟลเดอร์)หนึ่งๆ  ของระบบปฏิบัติการโดยใช้ภาษาจาวา  เราจะไม่สามารถลบมันได้  "ถ้าภายในไดเร็คทอรีนั้นยังมีข้อมูลอยู่ภายใน"  ซึ่งโดยทั่วไปแล้วในทางฟิสิคอล ตัวไดเร็คทอรี่ มันก็คือไฟล์ๆนึงนั่นเอง
        การลบไฟล์เราจะใช้คำสั่ง
//
File objectFile = new File(PATH, FILE_NAME);
boolean canDelete = objectFile.delete();
//
ซึ่งถ้าสามารถลบไฟล์นั้นได้ canDelete จะได้ค่าเป็น true แต่ถ้าลบไม่ได้จะได้ค่าเป็น false

คำถามคือ แล้วเราจะลบมันยังไงล่ะ  ถ้ามันเป็นไดเร็คทอรีที่มีทั้งไฟล์ แล้วก็ไดเร็คทอรี อยู่ภายใน  สมมติว่ามีซัก 5 ชั้น

คำตอบคือ walk tree(recursive) delete ทีละไฟล์ครั้บ

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

        คำตอบที่ผมเลือกใช้คือ  FileUtils Apache Commons ซึ่งที่จริงแล้ว  มันเป็นไลบรารีหนึ่งเกี่ยวกับ file system  ของระบบปฏิบัติการที่ช่วยทำให้โปรแกรมเมอร์อย่างเราๆ ลดภาระเกี่ยวกับการทำงานของไฟล์ลงไปได้เยอะเลยครับ  วันนี้เอาแค่ delete directory ก่อนน่ะครับ  ดังนี้

import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
//log file
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

class ... {
    private static final Logger log = LoggerFactory.getLogger(CLASS_NAME.class);
    private String PATH = "";
    ...
    ...
    try {
        File currentFolder = new File(PATH);
        FileUtils.deleteDirectory(currentFolder); //********
    } catch (IOException e) {
        log.debug("can't delete folder {} {}" , PATH, e);
    }
}
มันจะ walk tree delete ทั้งไฟล์และโฟลเดอร์ที่อยู่ภายในทั้งหมดให้เราเองครับ

อยากรู้ว่ามันทำอะไรได้อีกบ้าง ก็ลองอ่าน API มันดูเองน่ะครับ
http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html

แล้วเราจะรู้ว่า มันทำได้เยอะมากกกกกกกกกกกกกกกกก

ไม่มีความคิดเห็น:

แสดงความคิดเห็น