Đọc/ghi FILE trong ArrayList || Java 101

xử lý file trong java với các thao tác nhập, xuất, sắp xếp, xoá,... Xem chi tiết tại blog NDanh!

Trong các ngôn ngữ khác nhau thì việc truy xuất và xử lý file là một vấn đề quan trọng. Với java, có thể có nhiều cách khác nhau để có thể lưu được file.
Hôm nay, Blog NDanh sẽ hướng dẫn các bạn cách lưu, đọc và xử lý các vấn đề với FILE trong java của ArrayList.

I, Sử dụng serialization

1, Bước đầu tiên

interface Serializable một đối tượng cần được lưu bộ nhớ vào file. Mục đích là để chuyển các dữ liệu trong đối tượng đó về một dạng dữ liệu có thể đọc được.
- Giả sử ở đây, mình đang cần quản lý ArrayList<HOCSINH>() thì mình sẽ interface Serializable đối tượng class HOCSINH như sau:

2, Các thao tác 

Đầu tiên, bạn phải thêm thư viện cho việc ghi file. Ở đây, mình sử dụng thư viện java.io để chạy các thư viện đọc file.
Gọi các thư viện sau:
hoặc có thể dùng:
import java.io.*;

a, Ghi file 

Ở đây, mình đang muốn lưu ArrayList hs vào trong file là "hocsinh.txt" thì sẽ thực hiện như sau:

b, Đọc file

Các bạn chú ý dòng màu đỏ, nếu bạn muốn sắp xếp và in ra, in file thì sẽ chỉnh sửa ở chỗ đó.
Các phần khác là đang hỗ trợ đọc file.


c, Đọc file sau đó sắp xếp

Từ ý b, có thể sử dụng để làm nhiều việc khác nữa, như xoá đi một phần tử trong file, hay sắp xếp dữ liệu theo tên.
Chỉ cần thay đổi nội dung khung đỏ( ở ý b) thành thứ ta muốn, ví dụ dưới đây là đọc từ file và sau đó sắp xếp theo tên:
public void sapXep(){
try {
hs = new ArrayList<HOCSINH>();
// bắt đầu đọc danh sách từ file
FileInputStream fin = new FileInputStream("hocsinh.txt");
// định nghĩa fin đọc từ file hocsinh.txt
ObjectInputStream fout = new ObjectInputStream(fin);
hs = (ArrayList)fout.readObject(); // đang đọc
//Sắp xếp theo họ tên và in ra
Collections.sort(hs, new Comparator<HOCSINH>() {
@Override
public int compare(HOCSINH s1, HOCSINH s2) {
return (s1.getHoTen().compareTo(s2.getHoTen()));
}
});
FileOutputStream f = new FileOutputStream("hocsinh.txt");
ObjectOutputStream obj = new ObjectOutputStream(f);
obj.flush();
obj.writeObject(hs); // Ghi vào arraylist hs
obj.close(); // đóng file
f.close(); // đóng object
System.out.printf("\n%20s%15s%20s\n", "Họ tên", "Lớp", "Mã HS");
for(HOCSINH x:hs) {
x.xuat();
}
fin.close();
fout.close();// đóng lại
}
catch (FileNotFoundException fn) {
System.out.print("\nKhông tìm thấy file");
}
catch (Exception ex) {
ex.printStackTrace();
// in ra ngoại lệ
}
}

 d, Xoá phần tử và cập nhật vào file

Ví dụ, bạn muốn xoá một học sinh khỏi ArrayList và sau đó cập nhật lại vào file.
Code xoá và tự cập nhật vào file như sau:
public void xoa(){
         try {
hs = new ArrayList<HOCSINH>();
// bắt đầu đọc danh sách từ file
FileInputStream fin = new FileInputStream("hocsinh.txt");
// định nghĩa fin đọc từ file hocsinh.txt
ObjectInputStream fout = new ObjectInputStream(fin);
hs = (ArrayList)fout.readObject(); // đang đọc
//Xoá sau đó cập nhật lại
System.out.print("\nNhập vào mã SV muốn xoá: ");
int ma;
Scanner sc = new Scanner(System.in);
ma = sc.nextInt();
for(int i = 0; i<hs.size(); i++) {
if(ma == hs.get(i).getMaHS()){
hs.remove(hs.get(i));
}
}
System.out.printf("\n%20s%15s%20s\n", "Họ tên", "Lớp", "Mã HS");
for(HOCSINH x:hs) {
x.xuat();
}
// cập nhật lại vào file
FileOutputStream f = new FileOutputStream("hocsinh.txt");
ObjectOutputStream obj = new ObjectOutputStream(f);
obj.flush();
obj.writeObject(hs);
obj.close();
f.close();
fin.close();
fout.close();// đóng lại
}
catch (FileNotFoundException fn) {
System.out.print("\nKhông tìm thấy file");
}
catch (Exception ex) {
ex.printStackTrace();
// in ra ngoại lệ
}
}

e, Làm file rỗng

Ví dụ, mình muốn cập nhật lại file, tức là biến file đó thành rỗng chứ không phải xoá đi.
Thêm dòng lệnh sau vào:
new FileOutputStream("hocsinh.txt").close();
 hoặc cũng có thể dùng:
new FileWriter("hocsinh.txt", false).close();

hocsinh.txt có thể thay bằng tên file của bạn.
f, kiểm tra file có tồn tại?
Trong lúc mở file có lệnh try catch với FileNotFoundException để check xem file tồn tại không, nhưng ngoài ra, có một cách dễ hơn là dùng cấu trúc như sau:
public void checkFile(){
File f = new File("hocsinh.txt");
if(f.exists() && !f.isDirectory()) {
System.out.print("Tìm thấy file!");
}
else {
System.out.print("Không tìm thấy file!");
}
}
 Ở hình trên, file tồn tại nên trả về trường hợp "Tìm thấy file!"

Tải Source Code của phần I tại đây: 

COMMENTS

BLOGGER
Tên

bài viết hay,4,Bài viết khác,1,cấu trúc dữ liệu và giải thuật,3,fithou,36,ghim,4,giải tích 2,1,Hướng dẫn,5,Lập trình C,1,lập trình hướng đối tượng,3,Lập trình java,1,phần mềm,2,phần mềm lập trình,2,sách,1,tác phẩm đồ họa,3,tản mạn,4,Thiết kế web,3,thực hành lập trình cơ sở,18,thực hành lập trình hướng đối tượng,16,
ltr
item
Blog NDanh: Đọc/ghi FILE trong ArrayList || Java 101
Đọc/ghi FILE trong ArrayList || Java 101
xử lý file trong java với các thao tác nhập, xuất, sắp xếp, xoá,... Xem chi tiết tại blog NDanh!
https://1.bp.blogspot.com/-DaCPYRqRNXw/Xosjn6_5N6I/AAAAAAAAeXE/zk8Y9lDImiI6hAs_AUyqayXzGq-itS-ZwCLcBGAsYHQ/s1600/Screen%2BShot%2B2020-04-06%2Bat%2B6.41.57%2BPM.png
https://1.bp.blogspot.com/-DaCPYRqRNXw/Xosjn6_5N6I/AAAAAAAAeXE/zk8Y9lDImiI6hAs_AUyqayXzGq-itS-ZwCLcBGAsYHQ/s72-c/Screen%2BShot%2B2020-04-06%2Bat%2B6.41.57%2BPM.png
Blog NDanh
https://blog.ndanh.com/2020/04/file-trong-java.html
https://blog.ndanh.com/
https://blog.ndanh.com/
https://blog.ndanh.com/2020/04/file-trong-java.html
true
1596452775547375681
UTF-8
Tải tất cả bài viết Không tìm thấy bài viết nào XEM TẤT CẢ Đọc thêm Trả lời Hủy trả lời Xóa Bởi Trang chủ PAGES POSTS Xem tất cả Bài viết đề xuất CHỦ ĐỀ LƯU TRỮ SEARCH TẤT CẢ BÀI VIẾT Không tìm thấy nội dung của bạn Quay về trang chủ Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow CHIA SẺ ĐỂ XEM NỘI DUNG Bước 1: Chia sẻ lên facebook chế độ công khai Bước 2: Vào facebook, ấn vào bài đã chia sẻ công khai để hiện nội dung! Click Copy All Code Select All Code Code của bạn đã được copy Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content