Làm sao để nạp dữ liệu từ file sang List<Category>

package controller;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.io.FileUtils;

import model.Category;

public class FileCategory {

    List<Category> categories = new CategoryController().getCategories();// lay data tu controller
    // add(id: 1 - name: 1)
    // add(id: 2 - name: 2)
    // add(id: 3 - name: 3)

    // Tao file
    public void writeCategoryFile() throws IOException {
        File file = new File("file\\category.txt");
        if (categories.isEmpty()) {
            System.out.println("Danh sach category rong");
        } else
            FileUtils.writeLines(file, categories);// chuyen object category trong categories thanh string va luu vao
                                                   // trong file
    }

    public void readFileCategory() throws IOException {
        File file = new File("file\\category.txt");
        if (file.exists()) {
            List<String> lines = FileUtils.readLines(file, StandardCharsets.UTF_8);// doc du lieu tu file
            lines.forEach(System.out::println);// in du lieu ra
            // (id: 1 - name: 1)
            // (id: 2 - name: 2)
            // (id: 3 - name: 3)
            List<Object> list = Arrays.asList(lines.toArray());//chuyen list string thanh list object
            list.forEach(System.out::println);//in data
            //lam sao de chuyen cai object nay sang thanh category
        } else {
            System.out.print("File nay khong ton tai");
        }
    }

Làm sao để có thể chuyển list<obejct> thành list<category>

Đọc (read), bóc tách (split), gán giá trị (assign).

Hỏi bạn một câu: bạn muốn tạo mới một Category thì bạn cần gì?
Có phải là:

Category ct = new Category(...);

Trong dấu ... đó là các tham số cần thiết để tạo.
Bạn phải bóc tách từ những dòng đã đọc để được các tham số chứ.
Vd:
Tập tin:

0,C
1,C++
2,Java
3,C#
4,Python

Thì bạn phải tách sao cho nó được phần idname trên từng dòng để truyền vào Category.
Hướng dẫn: dùng phương thức String.split để bóc tách dữ liệu.

String j = "2,Java";
String js = j.split(",");
/* Kết quả:
js[0] = "2"
js[1] = "Java"
*/

Mà nói thật, dựa vào câu hỏi của bạn thì mình thấy bạn có lẽ đang học hơi bị nhanh rồi đấy. Chậm lại thôi.
Mong là mình đang nghĩ sai

3 Likes

Tớ đồng ý với @SITUVN.gcd về các bước tạo Category object để đưa vào list. Đó là cách hợp logic và đơn giản nhất.

Cơ mà, tớ có để ý dòng này:

FileUtils.writeLines(file, categories);

Theo doc của FileUtils#writeLines, method này sẽ dùng hàm toString của object để ghi vào file (Tớ hi vọng cậu đã cài đặt method đó trong Category rồi :smile:). Sẽ tốt hơn nếu như cậu chuyển list category thành xâu JSON, rồi lưu xâu đó vào file, thay vì dùng method write kia.
Lý do cho việc đó là, khi cậu đọc dữ liệu lại từ file, cậu có thể unmarshall xâu JSON thành list category luôn. Tất cả những gì cậu cần làm thêm chỉ là tìm thư viện hỗ trợ việc marshall/unmarshall xâu JSON thôi.
Cách trên vẫn theo hướng mà @SITUVN.gcd đề cập. Chỉ là, cậu sẽ tận dụng được các thư viện sẵn có để giải quyết bài toán thôi.

Hope it helps!

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?