Handling File
Duy Văn | 13/03/2025
Xử lý file là một phần quan trọng khi ứng dụng các ngôn ngữ lập trình vào kiểm thử
Trong một dự án trước mà mình support, mình cần phải đẩy các kết quả test lên TestRail thông qua APIs của nó. Và trong quá trình chạy test, script của mình phải tổng hợp được từng file JSON cho từng test case, đến cuối tổng hợp thành một payload lớn rồi request lên TestRail API. Script này bao gồm cẩ ghi file JSOn, đọc file JSON và xóa file JSON sau khi đã gửi lên TestRail
Việc kiểm thử tự động vượt xa câu chuyện chỉ có viết test case, test script và chạy, nhiều khi chúng ta còn cần phải xử lý dữ liệu, phát triển framework để đạt được mục đích
Trong Java, xử lý file được thực hiện với package java.io, class File
import java.io.File;
public class Main {
public static void main(String[] args) {
File file = new File("test.txt");
}
}
Một số method khá mạnh để làm việc với các file:
- canRead() : kiểm tra xem file có thể đọc được không (readable)
- canWrite() : kiểm tra xem file có thể ghi được không (writable)
- createNewFile() : tạo file mới
- delete() : xóa file
- exists() : kiểm tra xem file có tồn tại không
- getName() : lấy tên file
- getAbsolutePath() : lấy đường dẫn tuyệt đối của file
- getParent() : lấy thư mục cha của file
- list() : lấy danh sách các file trong thư mục
- mkdir() : tạo thư mục
Trong Java, đường dẫn của các file sẽ được viết theo cú pháp:
C:\\Users\\DuyVan\\Desktop\\test.txt: đường dẫn tuyệt đốitest.txt: đường dẫn tương đối
Tạo file
Để tạo file, chúng ta dùng method createNewFile() method, nó sẽ lấy đường dẫn của file và tạo file mới,đồng thời trả ra giá trị true nếu tạo thành công, false nếu không
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
File file = new File("test.txt");
try {
if (file.createNewFile()) {
System.out.println("File created: " + file.getName());
} else {
System.out.println("File already exists.");
}
} catch (IOException e) {
System.out.println("An error occurred.");
e.printStackTrace();
}
}
}
class IOException là class sẽ giúp ta bắt lỗi khi tạo file
Đường dẫn của file khi viết sẽ cần cụ thể theo hệ điều hành, với windows:
C:\\Users\\DuyVan\\Desktop\\test.txt: đường dẫn tuyệt đối..\\test.txt: đường dẫn tương đối
Với MacOS và Linux thì có syntax sau:
/Users/DuyVan/Desktop/test.txt: đường dẫn tuyệt đối../test.txt: đường dẫn tương đối
Thế nên, khi tạo ra các testscript mà có khả năng phải chạy trên hệ điều hành khác, ví dụ như một script vừa chạy trên máy tester (windows) vừa chạy trên server CI/CD (Linux), chúng ta cần phải cẩn thận với việc viết đường dẫn, thường chúng ta sẽ có cơ chế để xử lý đường dẫn tuỳ theo hệ điều hành, có method để lấy ra đường dẫn tuyệt đối, rồi dựa vào đó chúng ta tạo ra file. Hoặc dùng method để biết hệ điều hành là gì với System.getProperty("os.name") rồi tạo file theo cách tương ứng
Khi thực hiện các tác vụ liên quan đến tạo, ghi, đọc, xoá file thì luôn cần sử dụng block try catch
Viết file
Để viết file, chúng ta cần sử dụng class FileWritter, method write() để viết dữ liệu vào file
import java.io.FileWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
FileWriter myWriter = new FileWriter("./test.txt");
myWriter.write("Hello World");
myWriter.close();
System.out.println("Successfully wrote to the file.");
} catch (IOException e) {
System.out.println("An error occurred.");
e.printStackTrace();
}
}
}
Đọc file
Để đọc file, chúng ta cần:
- class
Fileđể tạo file object - class
Scannerđể đọc file text - class exception
FileNotFoundExceptionđể bắt lỗi khi không tìm thấy file
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try {
File myObj = new File("test.txt");
Scanner myReader = new Scanner(myObj);
while (myReader.hasNextLine()) {
String data = myReader.nextLine();
System.out.println(data);
}
myReader.close();
} catch (FileNotFoundException e) {
System.out.println("An error occurred.");
e.printStackTrace();
}
}
}
Có khá nhiều class của Java API có thể đọc và ghi file, như FileReader, BufferedReader, … tuỳ thuộc phiên bản Java, đồng thời chúng ta đang cần đọc bytes hay text, cũng như kích thước file
Xóa file
Để xoá file thì chúng ta sẽ dùng class File và method delete()
import java.io.File;
public class Main {
public static void main(String[] args) {
File myObj = new File("test.txt");
if (myObj.delete()) {
System.out.println("Deleted the file: " + myObj.getName());
} else {
System.out.println("Failed to delete the file.");
}
}
}
Để xoá thư mục thì chúng ta cần phải xoá hết các file trong thư mục đó trước, sau đó mới xoá thư mục
Ví dụ
import java.io.File;
public class Main {
public static void main(String[] args) {
File myObj = new File("C:\\Users\\DuyVan\\Desktop\\test");
if (myObj.delete()) {
System.out.println("Deleted the file: " + myObj.getName());
} else {
System.out.println("Failed to delete the file.");
}
}
}