Chỉnh sửa nội dung file.txt trong java

Discussion in 'Trao đổi về thuật toán' started by aovong, 11/5/17.

  1. aovong

    aovong New Member

    Mình có file text nội dung mẫu như này:
    Mã: 001
    Họ tên: Anh
    Địa chỉ: HCM
    Ngày sinh: 12/12/2000

    Mã: 002
    Họ tên: Ha
    Địa chỉ: HN
    Ngày sinh: 1/1/1999

    Bây giờ mún sửa thông tin 1 người trong file này, ví dụ:
    Mã: 001
    Họ tên: Anh
    Địa chỉ: Huế
    Ngày sinh: 1/1/2001

    Mã: 002
    Họ tên: Ha
    Địa chỉ: HN
    Ngày sinh: 1/1/1999

    Pro nào giúp mình với , cám ơn!!!
    Code:
    public class DocGhiFile {
        public static void main(String[] args) throws IOException {
            System.out.println("---Danh sách nhân viên---");
            DocFile("nhanvien.txt");
    //     CapNhatFile("nhanvien.txt");
        }
    
        public static void DocFile(String f) throws IOException {
            FileInputStream fis = new FileInputStream(f);
            InputStreamReader reader = new InputStreamReader(fis, "UTF-8");
            BufferedReader br = new BufferedReader(reader);
            String s;
            do {
                s = null;
                s = br.readLine();
                if (s != null) {
                    System.out.println(s);
                }
            } while (s != null);
            System.out.println();
            br.close();
        }
    
        public static void CapNhatFile(String f) throws IOException {
            String tenmoi = null;
            String diachimoi = null;
            String ngaysinhmoi = null;
            boolean checked = true;
    
            File file = new File(f);
            File tempFile = new File("tempfile.txt");
    
            FileInputStream fis = new FileInputStream(file);
            Scanner sc = new Scanner(fis);
    
            BufferedWriter bw = new BufferedWriter(new FileWriter(tempFile));
    
            System.out.print("Nhập mã nhân viên muốn sửa: ");
            Scanner s = new Scanner(System.in);
            String ma = s.nextLine();
    
            while (sc.hasNextLine()) {
    
                String line = sc.nextLine();
                String[] token = line.split("\r\n");
    
                if (token[0].equals(ma) && checked) {
                    System.out.print("Tên mới: ");
                    Scanner s1 = new Scanner(System.in);
                    tenmoi = s1.nextLine();
                    System.out.print("Địa chỉ mới: ");
                    Scanner s2 = new Scanner(System.in);
                    diachimoi = s2.nextLine();
                    System.out.print("Ngày sinh mới: ");
                    Scanner s3 = new Scanner(System.in);
                    ngaysinhmoi = s3.nextLine();
                    System.out.print(line);
                    line = token[0] + "\r\n" + tenmoi + "\r\n" + diachimoi + "\r\n" + ngaysinhmoi;
                    checked = false;
                }
    
                bw.write(line + System.getProperty("line.separator"));
            }
            sc.close();
            bw.close();
            file.delete();
            tempFile.renameTo(file);
        }
    
    }
    Kết quả DocFile();
    ---Danh sách nhân viên---
    Mã: 001
    Họ tên: Anh
    Địa chỉ: HCM
    Ngày sinh: 12/12/2000

    Mã: 002
    Họ tên: Ha
    Địa chỉ: HN
    Ngày sinh: 1/1/1999
  2. JackV

    JackV Administrator Staff Member

    Bạn post code đọc dữ liệu vào > hiện thị nội dung đã đọc vào > lưu xuống lại để mọi người hỗ trợ bạn nhé.
  3. thehatredman

    thehatredman New Member

    Theo mình bạn nên xử lý như sau:
    Mã: 001
    Họ tên: Anh
    Địa chỉ: HCM
    Ngày sinh: 12/12/2000

    Mã: 002
    Họ tên: Ha
    Địa chỉ: HN
    Ngày sinh: 1/1/1999

    Đọc dữ liệu vào Map lấy key = Mã, Object
    Map<key, Object> ~ Map<Ma, Object>
    Object lưu: số dòng bắt đầu của 1 nhóm thông tin --> có thể tìm được các thông tin cần sửa. Sau khi sửa thì save lại.
    Object: index_row, code, name, address, born

    Attached Files:

  4. Tran van ha

    Tran van ha New Member

    Bài này cách đơn giản nhất đó là sử dụng biểu thức chính quy.
    Sử dụng biểu thức chính quy để đọc toàn bộ file và cho vào List<User>
    trong đó User là class có các trường ma, hoten, diachi, ngaysinh.

    Bước 1 lấy toàn bộ text của file như là một String, sau đó phân tích String này. Sử dụng vòng lặp để lặp lấy ra từng cụm mỗi cụm là cặp 4 giá trị.

    Regex:

    Code:
    String regex="Mã:(?<ma>.*?)\nHọ tên:(?<hoten>.*?)\nĐịa chỉ:(?<diachi>.*?)\nNgày sinh:(?<ngaysinh>.*?)\n";
    Bạn tham khảo thêm hướng dẫn tại đây:

    http://o7planning.org/vi/10175/huong-dan-su-dung-bieu-thuc-chinh-quy-trong-java#a14102
  5. nhokkokhoc

    nhokkokhoc New Member

    Chế nên đọc ra, rồi ghi đè lại, còn nếu dự liệu lớn hơn, tốt nhất lưu trên Db truy vấn cho dễ.

Chia sẻ trang này