Java's createNewFile () - nó cũng sẽ tạo thư mục?


85

Tôi có một điều kiện để kiểm tra xem một tệp nhất định có tồn tại hay không trước khi tiếp tục ( ./logs/error.log). Nếu nó không được tìm thấy, tôi muốn tạo nó. Tuy nhiên, sẽ

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

cũng tạo ra logs/nếu nó không tồn tại?

Câu trả lời:


188

Không.
Sử dụng tmp.getParentFile().mkdirs()trước khi bạn tạo tệp.


Giáo sư. Tôi đang sử dụng "tmp.mkdirs ()". Đó là lý do tại sao tệp của tôi được tạo dưới dạng một thư mục
GabrielBB

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

6
Tôi đề nghị để sử dụng "mkdirs" thay vì "mkdir" do đó, mã của bạn cũng có thể tạo các thư mục mẹ không tồn tại :)
Nimpo

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

Nếu các thư mục đã tồn tại, sẽ không có gì xảy ra, vì vậy bạn không cần kiểm tra.


8

Kiểu Java 8

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

Để ghi vào tệp

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

Đọc

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

Đầy đủ ví dụ

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) bây giờ (> = 1.3) cũng sẽ tạo thư mục và tệp nếu chúng không tồn tại.


1
Xin lỗi các bình luận muộn nhưng bây giờ điều này nênFileUtils.touch(new File(file_path))
shark1608

0

Không, và nếu logskhông tồn tại, bạn sẽ nhận đượcjava.io.IOException: No such file or directory

Thực tế thú vị cho các nhà phát triển Android: gọi những thứ thích Files.createDirectories()Paths.get()sẽ hoạt động khi hỗ trợ min api 26.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.