Tags:

Thao tác file cơ bản trong java

Thao tác với tập tin, thư mục trong lập trình java là một công việc mà chúng ta thường hay gặp phải. Trong bài viết này mình xin giới thiệu về File class dùng để thao tác với file(tập tin), folder(thư mục) trong java.

File class đại diện cho một tập tin(file) hoặc một thư mục(folder) trong java, nó cung cấp cho chúng ta rất nhiều method hữu ích để làm việc với file, folder như là:

  • Tạo file 
  • Kiểm tra sự tồn tại của file, folder
  • Tạo folder
  • Lấy độ dài của file
  • Đổi tên hoặc di chuyển file, folder
  • Xóa file, folder
  • Kiểm tra đường dẫn là file hay folder
  • Liệt kê các file, folder chứa trong folder

Tạo file trong java

Trước mọi thao tác với file trong java bạn cần khởi tạo một instance của File class.

File file = new File("/Users/nguyenthanhhai/Desktop/test.txt");

Constructor của File class nhận một tham số truyền vào là chuỗi chứa đường dẫn của file mà bạn muốn instance đó tham chiếu đến. Lưu ý rằng đường dẫn này không nhất thiết phải tham chiếu đến một file thực và chúng ta sẽ nhận được exception khi thực hiện thao tác trên file instance khi nó không tồn tại. 

Để đảm bảo chúng ta có thể kiểm tra đường dẫn đến file có tồn tại hay không rồi tiến hành khởi tạo chúng. 

import java.io.File;
import java.io.IOException;


class main {
    public static void main(String[] args) throws IOException {
        File file = new File("/Users/nguyenthanhhai/Desktop/test.txt");
        if (file.exists()) {
            System.out.println("Exists");
        } else {
            file.createNewFile();
            System.out.println("Created!");
        }
    }
}

Output:

Run 1: Created!
Run 2: Exists

Kiểm tra sự tồn tại của File, Folder

Chúng ta có thể sử dụng exists() để kiểm tra xem file hoặc folder có tồn tại tại đường dẫn hay không? Như ở trên mình cũng đã có sử dụng chung với tạo file.

File file = new File("/Users/nguyenthanhhai/Desktop/test.txt");

boolean fileExists = file.exists();

Đối với folder để kiểm tra sự tồn tại của nó thì cũng thực hiện như trên và thay đường dẫn tới folder.

File file = new File("/Users/nguyenthanhhai/Desktop/data");

boolean fileExists = file.exists();

Tạo thư mục trong java

Để khởi tạo folder chúng ta có hai method mkdir()mkdirs() với các mục đích khác nhau.

mkdir() khởi tạo thư mục năm ở cuối đường dẫn, nếu các folder đi trước không tồn tại mkdir() sẽ trả về false.

Giả sử trong thư mục Desktop tại đường dẫn (/Users/nguyenthanhhai/Desktop/) đã có sẵn folder data và không có sẵn folder empty.

File file1 = new File("/Users/nguyenthanhhai/Desktop/data/test)");

boolean dirCreated1 = file1.mkdir(); // true


File file2 = new File("/Users/nguyenthanhhai/Desktop/empty/test)");

boolean dirCreated2 = file2.mkdir(); // false

Trái ngược với mkdir() mkdirs() sẽ tạo tất cả các thư mục trước đó nếu nó chưa tồn tại

File file1 = new File("/Users/nguyenthanhhai/Desktop/data/test)");

boolean dirCreated1 = file1.mkdirs(); // true

File file2 = new File("/Users/nguyenthanhhai/Desktop/empty/test)");

boolean dirCreated2 = file2.mkdirs(); // true

Lấy kích thước file trong java

File class cho phép bạn lấy kích thước của file theo đơn vị byte bằng cách gọi method length().

File file = new File("/Users/nguyenthanhhai/Desktop/demo.txt");
        
System.out.println(file.length()); // 115

Đổi tên hoặc di chuyển file, folder trong java

Để đổi tên file hoặc folder trong java, chúng ta có thể sử dụng method renameTo() của File class.

Đổi tên file, folder

// Rename file
File file = new File("/Users/nguyenthanhhai/Desktop/test.txt");

boolean renameFile = file.renameTo(new File("/Users/nguyenthanhhai/Desktop/new_test.txt"));

// Rename folder
File folder = new File("/Users/nguyenthanhhai/Desktop/test");

boolean renameFolder = folder.renameTo(new File("/Users/nguyenthanhhai/Desktop/new_test"));

Di chuyển file, folder

Chúng ta cũng dùng renameTo() để di chuyển file bằng cách thay đường dẫn trong tham số truyền vào. 

Giả sử có sẵn folder empty trong ổ đĩa D.

// Move file
File file = new File("/Users/nguyenthanhhai/Desktop/test.txt");

boolean moveFile = file.renameTo(new File("/Users/nguyenthanhhai/Desktop/empty/test.txt"));

// Move folder demo sang folder
File folder = new File("/Users/nguyenthanhhai/Desktop/demo");

boolean moveFile = file.renameTo(new File("/Users/nguyenthanhhai/Desktop/empty/demo"));

Di chuyển và đổi tên file, folder

Để di chuyển và đổi tên file, folder thì chúng ta chỉ việc sửa lại tên của file, folder tên ứng trên đường dẫn.

// Move file demo sang folder
File file = new File("/Users/nguyenthanhhai/Desktop/test.txt");

boolean moveFile = file.renameTo(new File("/Users/nguyenthanhhai/Desktop/empty/new_test.txt"));

// Move folder demo sang folder
File folder = new File("/Users/nguyenthanhhai/Desktop/demo");

boolean moveFile = file.renameTo(new File("/Users/nguyenthanhhai/Desktop/new_demo"));

Note: method renameTo() trả về true để cho biết rằng quá trình đổi tên file đã thành công. Quá trình đổi tên hoặc di chuyển file, folder có nhiều lý do không thành công như là đang được mở, không có quyền truy cập etc trả về false.

Xóa file và folder trong java

Để xóa filefolder trong File class sử dụng delete(). delete() trả về true để thông báo xóa file, folder thành công. Qúa trình xóa file, folder có nhiều lý do không thành công như là file, folder không tồn tại, đang được mở, không có quyền xóa etc trả về false.

// File
File file = new File("/Users/nguyenthanhhai/Desktop/input-file.txt");

boolean removeFile = file.delete();

File folder = new File("/Users/nguyenthanhhai/Desktop/demo");

boolean removeFolder  = folder.delete();

Note: Đối với folder chúng ta chỉ sử dụng delete() khi folder đó rỗng, nếu bên trong có chứa các file và subFolder thì delete() sẽ không thành công.

Xóa folder và tất cả các file, folder con

Một điểm hạn chế khi bạn sử dụng delete() method để xóa folder thì chỉ xóa được folder rỗng hành động này gần như vô nghĩa mà trong thực tế không ai làm như vậy. Để xóa folder đầu tiên chúng ta cần xóa các file và subFolder bên trong nó, với mỗi subFolder bên trong nó chúng ta cũng xóa xóa tất cả các file và subFolder cứ như vậy cho đến khi folder ban đầu rỗng, cuối cùng chúng ta mới có thể xóa folder cần xóa.

Để giải quyết bài toán này chúng ta có method sử dụng đệ quy như sau:

public static boolean deleteDir(File dir){
    File[] files = dir.listFiles();
    if(files != null){
        for(File file : files){
            if(file.isDirectory()){
                deleteDir(file);
            } else {
                file.delete();
            }
        }
    }
    return dir.delete();
}

Kiểm tra đường dẫn là file hay folder

File object đại diện cho cả file và folder trong java, chúng ta chỉ cần gọi method isFile() hoặc isDirectory() để kiểm tra là file hoặc folder.

File file = new File("/Users/nguyenthanhhai/Desktop/test");

System.out.println("Path is File: " + file.isFile());
System.out.println("Path is Folder: " + file.isDirectory());

Kiểm tra file bị ẩn trong java

Sử dụng method isHiden() để kiểm tra file hoặc folder có đang bị ẩn hay không

File file = new File("/Users/nguyenthanhhai/Desktop/test");

System.out.println("Hiden: " + file.isHidden());

Lấy danh sách File và folder trong folder cha

Để lấy danh sách các file, folder trong folder cha chúng ta gọi method list() hoặc listFiles()

list() trả về mảng String chứa tên các file và folder trong folder cha.

File file = new File("/Users/nguyenthanhhai/Desktop/ds");

String[] files = file.list();

listFiles() trả về các instance của folder chứa trong folder cha.

File file = new File("/Users/nguyenthanhhai/Desktop/ds");

File[] files = file.listFiles();

Mark readonly file, folder

Để đánh dấu file, folder chỉ được đọc sử dụng method setReadonly(). Trả về true để thông báo thành công, trường hợp false nếu không thành công có nhiều trường hợp như file đang được mở, file không tồn tại etc.

File file = new File("/Users/nguyenthanhhai/Desktop/test.txt");

System.out.println(file.setReadOnly());

Kiểm tra ứng dụng có thể đọc hoặc ghi vào file

Để kiểm tra chương trình chúng ta có thể đọc hoặc ghi vào một file được chỉ định tại đường dẫn cụ thể chúng ta có thể sử dụng method canRead() và canWrite() để kiểm tra. canRead(), canWrite() trả về true để thông báo rằng chúng ta có thể đọc hoặc ghi tương ứng.

File file = new File("/Users/nguyenthanhhai/Desktop/test.txt");

System.out.println(file.canRead());

System.out.println(file.canWrite());

Nguồn tham khảo:

http://tutorials.jenkov.com/java-io/file.html

https://www.geeksforgeeks.org/file-class-in-java/

3.7 3 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x