createNewFile () ของ Java - จะสร้างไดเรกทอรีด้วยหรือไม่


87

ฉันมีเงื่อนไขในการตรวจสอบว่ามีไฟล์อยู่หรือไม่ก่อนดำเนินการต่อ ( ./logs/error.log) หากไม่พบฉันต้องการสร้างมัน อย่างไรก็ตามจะ

File tmp = new File("logs/error.log");
tmp.createNewFile();

สร้างด้วยlogs/ถ้ามันไม่มี?

คำตอบ:


190

ไม่
ใช้tmp.getParentFile().mkdirs()ก่อนที่คุณจะสร้างไฟล์


อ๊ะ. ฉันใช้ "tmp.mkdirs ()" นั่นเป็นสาเหตุที่ไฟล์ของฉันถูกสร้างเป็นโฟลเดอร์
GabrielBB

20
File theDir = new File(DirectoryPath);
if (!theDir.exists()) theDir.mkdirs();

6
ฉันขอเสนอให้ใช้ "mkdirs" แทน "mkdir" เพื่อให้โค้ดของคุณสามารถสร้างโฟลเดอร์หลักที่ไม่มีอยู่ได้ :)
Nimpo

14
File directory = new File(tmp.getParentFile().getAbsolutePath());
directory.mkdirs();

หากมีไดเรกทอรีอยู่แล้วจะไม่มีอะไรเกิดขึ้นดังนั้นคุณไม่จำเป็นต้องตรวจสอบใด ๆ


9

สไตล์ Java 8

Path path = Paths.get("logs/error.log");
Files.createDirectories(path.getParent());

เพื่อเขียนลงไฟล์

Files.write(path, "Log log".getBytes());

อ่าน

System.out.println(Files.readAllLines(path));

ตัวอย่างเต็ม

public class CreateFolderAndWrite {

    public static void main(String[] args) {
        try {
            Path path = Paths.get("logs/error.log");
            Files.createDirectories(path.getParent());

            Files.write(path, "Log log".getBytes());

            System.out.println(Files.readAllLines(path));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3

StringUtils.touch(/path/filename.ext) ตอนนี้จะ (> = 1.3) จะสร้างไดเร็กทอรีและไฟล์ด้วยหากไม่มีอยู่


1
ขออภัยความคิดเห็นที่ล่าช้า แต่ตอนนี้ควรจะเป็นFileUtils.touch(new File(file_path))
shark1608

0

ไม่และหากlogsไม่มีคุณจะได้รับjava.io.IOException: No such file or directory

ความสนุกสำหรับนักพัฒนา Android: เรียกไลค์Files.createDirectories()และPaths.get()จะใช้งานได้เมื่อรองรับ min api 26

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