1. Giới thiệu

Trong hướng dẫn nhanh này, chúng ta sẽ tìm hiểu cách tạo một Tệp mới trong Java – đầu tiên bằng cách sử dụng các lớp File và Path từ NIO, sau đó là các lớp File Java và FileOutputStream , Google Guava và cuối cùng là thư viện Apache Commons IO .

2. Cài đặt

Trong các ví dụ, chúng tôi sẽ xác định một hằng số cho tên tệp:

private final String FILE_NAME = "src/test/resources/fileToCreate.txt";

Và chúng tôi cũng sẽ thêm một bước dọn dẹp để đảm bảo rằng tệp không tồn tại trước mỗi lần kiểm tra và xóa nó sau mỗi lần chạy thử nghiệm

@AfterEach
@BeforeEach
public void cleanUpFiles() {
    File targetFile = new File(FILE_NAME);
    targetFile.delete();
}

3. Sử dụng NIO Files.createFile()

Hãy bắt đầu bằng cách sử dụng phương thức Files.createFile() từ gói Java NIO:

@Test
public void givenUsingNio_whenCreatingFile_thenCorrect() throws IOException {
    Path newFilePath = Paths.get(FILE_NAME);
    Files.createFile(newFilePath);
}

Như bạn có thể thấy, mã vẫn rất đơn giản, chúng tôi hiện đang sử dụng Path interface thay vì File.

Một điều cần lưu ý ở đây là API mới tận dụng tốt các ngoại lệ. Nếu tệp đã tồn tại, chúng tôi không còn phải kiểm tra mã trả về nữa. Thay vào đó, chúng ta sẽ nhận được FileAlreadyExistsException:

java.nio.file.FileAlreadyExistsException: <code class="language-java">src/test/resources/fileToCreate.txt

4. Sử dụng File.createNewFile()

Bây giờ chúng ta hãy xem cách chúng ta có thể làm điều tương tự bằng cách sử dụng lớp java.io.File:

@Test
public void givenUsingFile_whenCreatingFile_thenCorrect() throws IOException {
    File newFile = new File(FILE_NAME);
    boolean success = newFile.createNewFile();
    assertTrue(success);
}

Lưu ý rằng tệp không được tồn tại để thao tác này thành công. Nếu tệp tồn tại thì thao tác createNewFile() sẽ trả về sai.

5. Sử dụng FileOutputStream

Một cách khác để tạo một tệp mới là sử dụng java.io.FileOutputStream:

@Test
public void givenUsingFileOutputStream_whenCreatingFile_thenCorrect() throws IOException {
    try(FileOutputStream fileOutputStream = new FileOutputStream(FILE_NAME)){
    }
}

Trong trường hợp này, một tệp mới được tạo khi chúng ta khởi tạo đối tượng FileOutputStream. Nếu một tập tin có tên cụ thể đã tồn tại, nó sẽ bị ghi đè. Tuy nhiên, nếu tệp hiện có là một thư mục hoặc không thể tạo tệp mới vì bất kỳ lý do gì thì chúng tôi sẽ nhận được FileNotFoundException.

Ngoài ra, hãy lưu ý rằng chúng tôi đã sử dụng câu lệnh try-with-resource – để đảm bảo rằng luồng được đóng đúng cách

6. Sử dụng Guava

Giải phápGuava để tạo một tệp mới cũng là một giải pháp nhanh chóng:

@Test
public void givenUsingGuava_whenCreatingFile_thenCorrect() throws IOException {
    com.google.common.io.Files.touch(new File(FILE_NAME));
}

7. Sử dụng Apache Commons IO

Thư viện Apache Commons cung cấp phương thức FileUtils.touch() thực hiện hành vi tương tự như tiện ích “touch” trong Linux.

Do đó, nó tạo một tệp trống mới hoặc thậm chí một tệp và đường dẫn đầy đủ đến tệp đó trong hệ thống tệp:

@Test
public void givenUsingCommonsIo_whenCreatingFile_thenCorrect() throws IOException {
    FileUtils.touch(new File(FILE_NAME));
}

Lưu ý rằng thao tác này hoạt động hơi khác so với các ví dụ trước: nếu tệp đã tồn tại, thao tác sẽ không thất bại, đơn giản là nó không thực hiện bất kỳ điều gì.

Và chúng ta đã có 4 cách nhanh chóng để tạo một tệp mới trong Java.

8. Kết luận

Trong bài viết này, chúng ta đã xem xét các giải pháp khác nhau để tạo tệp trong Java. Chúng tôi đã sử dụng các lớp là một phần của JDK và các thư viện bên ngoài.