01/10/2018, 17:32

Đọc file txt nhiều dòng

cho em hỏi ví dụ 1 file txt có số dòng lớn hơn 50k thì giải quyết làm sao để đọc mà không bị đơ chương trình , hiện tại em dùng cách là sử dụng luồng stream để đọc vào 1 lượt hết cả 50k line rồi lưu lại trong 1 List >>> cách này chỉ đúng với file số dòng nhỏ vì load nhanh , nhưng file số dòng lớn thì ctr` bị đơ luôn. Em có nghĩ ra 1 giải pháp như thế này

  1. dùng BufferedReader để đọc từng dòng đọc đến đâu dùng đến đó chứ không đọc hết toàn bộ rồi mới dùng >>> cách này giúp ctr` ko bị đơ nữa nhưng mắc 1 cái là ko thể hiển thị tổng số dòng có trong file đó
Tao Không Ngu. viết 19:37 ngày 01/10/2018

Hi Madafaker.
Nếu bạn làm ui thì có nhiều giải pháp. Đọc buffer trên 1 luồng khác sau đó thao tác trên một luồng khác (Không bị đơ mà vẫn lòad hết file sau khoảng vài giây). Còn hiện số dòng thì trong khi luồng đọc đang chạy bạn có thể thêm 1 thanh loading để báo. Nói chung có nhiều giải pháp nhưng cơ bản là đọc từng phần và dùng đa luồng.

Nguyễn Đình Anh viết 19:42 ngày 01/10/2018

nhưng mắc 1 cái là ko thể hiển thị tổng số dòng có trong file đó

Vậy tức là bạn muốn tính tổng số dòng của 1 file à ? Vậy bạn có thể thử dùng Scanner với đoạn code sau

       FileInputStream fis = new FileInputStream("Data.txt");
       Scanner scan = new Scanner(fis);
       int number = 0;
       
       while(scan.hasNext()){
           number++;
           scan.nextLine();
       }
       System.out.println("Total number of file:" + number);
       scan.close();
   }

Và đây là kết quả
df


Nếu không thì có thể dùng cách của anh Phong_Ky_Vo

Tao Không Ngu. viết 19:39 ngày 01/10/2018

Hi Nguyễn Đình Anh.
Đã thế thì chia làm 4 luồng (Tùy số nhân CPU) rồi chạy cho từng phần của file luôn.

Madafaker viết 19:45 ngày 01/10/2018

vậy luồng chính sẽ đợi các luồng kia thực thi xong rồi mới chạy à…

Tao Không Ngu. viết 19:48 ngày 01/10/2018

Hi Madafaker.
Cái này phụ thuộc vào phương pháp luận hay đại khái thế. Nó phụ thuộc vào thực tại khách quan. Kiểu như muốn tìm phần tử lớn nhất của một mảng ngẫu nhiên thì bạn phải đọc tất cả các phần tử của mảng. Muốn biết file có bao nhiêu dòng thì bạn phải đọc hết file đó. Thế thôi, các giải pháp chỉ giảm thời gian cũng như tương tác người dùng thân thiện thôi chứ không thể vượt qua được thực tại khách quan đó.

Bài liên quan
0