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

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