การลบไฟล์เราจะใช้คำสั่ง
// 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
แล้วเราจะรู้ว่า มันทำได้เยอะมากกกกกกกกกกกกกกกกก
ไม่มีความคิดเห็น:
แสดงความคิดเห็น