30/09/2018, 16:03

Hỏi về ghi file trong Java sử dụng BufferedWriter

Chào mọi người,mình lập topic này muốn hỏi các bạn 1 vấn đề thôi,mình có thể sữa 1 dòng dữ liệu trong file .txt mà không cần phải cập nhật lại hết tất cả các dòng khác lại hay không,vì mình thấy trên mạng, dùng BufferedWrite ng ta chỉ hướng dẫn là thay thế toàn bộ nội dung trong file hoặc là thêm vào cuối file thôi.ví dụ file txt định dạng như >>> Tài khoản Pin Tiền
người dùng giao dịch xong mình muốn trừ tiền trong tài khoản (tài khoản bất kì nào đó nằm giữ danh sách ),thì mình nên làm sao để chỉ sửa tại vị trí đó dòng đó?
Cảm ơn các bạn đã đọc.

Phạm Hoàng Tuấn viết 18:07 ngày 30/09/2018

Hình như là không bạn ah. Chính vì vậy nên ng ta mới cho ra đời các hệ quản trị csdl như sql hay mysql.
Bạn vẫn có thể thay đổi 1 dòng bằng cách tạo 1 file mới, chuyển hết dữ liệu cũ và dòng mới (đã dc update) ra 1 file mới. (Mình đặt trùng tên với file cũ để coi như là k có file mới) . Bạn có thể sử dụng file xml để lưu và cập nhật dữ liệu tốt hơn hoặc thử tham khảo đoạn code này xem.

    public class Main {
        public static void main(String[] args) {
            Main rlf = new Main();
            rlf.removeLineFromFile("F:\\text.txt", "bbb");
        }
    
        public void removeLineFromFile(String file, String lineToRemove) {
            try {
                File inFile = new File(file);
    
                if (!inFile.isFile()) {
                    System.out.println("Parameter is not an existing file");
                    return;
                }
    
                //Construct the new file that will later be renamed to the original filename.
                File tempFile = new File(inFile.getAbsolutePath() + ".txt");
    
                BufferedReader br = new BufferedReader(new FileReader(file));
                PrintWriter pw = new PrintWriter(new FileWriter(tempFile));
    
                String line = null;
    
                //Read from the original file and write to the new
                //unless content matches data to be removed.
                while ((line = br.readLine()) != null) {
    
                    if (!line.trim().equals(lineToRemove)) {
    
                        pw.println(line);
                        pw.flush();
                    }
                }
                pw.close();
                br.close();
    
                //Delete the original file
                if (!inFile.delete()) {
                    System.out.println("Could not delete file");
                    return;
                }
    
                //Rename the new file to the filename the original file had.
                if (!tempFile.renameTo(inFile)) System.out.println("Could not rename file");
    
            }
            catch (FileNotFoundException ex) {
                ex.printStackTrace();
            }
            catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    } 

p/s :Cái này mình tìm trên stackover, quên xóa trang nên k nhớ rõ nguồn

Gia Luân viết 18:12 ngày 30/09/2018

Cảm ơn bạn nhiều,mình cứ tưởng làm đươc hkỳ sau mình mới học CSDL

Phạm Hoàng Tuấn viết 18:05 ngày 30/09/2018

uhm, nếu mình nhớ k nhầm thì khi ghi text xuống,máy nó lưu là 1 chuỗi byte thôi dù dòng text bạn có nhiều dòng, nên muốn cập nhật, bạn fai load file lên, chỉnh sửa rồi cập nhật (thực chất là ghi lại với dữ liệu mới).

buithaiminh viết 18:11 ngày 30/09/2018

Nếu dữ liệu nhỏ thì bạn lưu text file dạng XML để dễ dàng thao tác, không cần dùng các hệ CSDL rườm rà lắm. Mình viết những chương trình quản lý danh sách hàng bằng VB.NET, C# và C++ sử dụng XML với gần 10.000 mặt hàng hoặc hơn nữa, tốc độ truy xuất và thao tác rất ổn. Trước đó, mình sử dụng MSSQL và Access nhưng rườm rà trong việc triển khai, tốc độ cũng chẳng khác mấy nên cuối cùng vẫn chọn dùng XML. Nên nếu dữ liệu nhỏ, chỉ cần XML là xử lý tốt.

Bài liên quan
0