Load data từ file .txt lên array trong java để xữ lý

25/10/2017

Lời nói đầu:

Xin chào tất cả các bạn:

Đề toán này là một trong những khó khăn đầu tiên mà các bạn gặp phải trong quá trình khởi tạo dữ liệu đưa vào chương trình để xữ lý cho các bài tập về đồ thị.

Vì vậy mà hôm nay Phong sẽ giới thiệu cách giải quyết vấn đề này,các bạn theo dõi các bước làm bên dưới nha!

Ý tưởng bài làm:

Để bắt đầu bài này ta cần phải suy nghĩ: Phương thức nhận vào cái gì? Trả về giá trị gì? Nhiệm vụ (hay chức năng) phương thức này là gì?,.. Thường thì khi bắt đầu viết một phương thức ta phải nghĩ đến những câu hỏi đó,trả lời được câu hỏi đó là mình đã bớt được phần nào khó khăn rồi phải hông nè? Hii.Đầu tiên là nhiệm vụ phương thức này ai cũng biết là load dữ liệu từ file txt lên. Tiếp theo là phương thức này cần nhận vào đường dẫn file txt,hoặc file txt.Thì trong trường hợp này,để thuận tiện thì mình nên dùng truyền vào đường dẫn.Tiếp đến là phương thức trả về,theo như nhiệm vụ thì có thể mình load file này lưu vào mãng,thì có thể mình sẽ trả về mãng,hoặc là mình có thể trả về boolean,hoặc là không trả về.Thì mình sắp xếp nó như vậy để các bạn làm quen với cách suy nghĩ. Thì từ những phân tích đó,chúng ta sẽ có được một phương thức rỗng như sau:

public boolean loadData(String filePath){
}
Rồi,tiếp theo là đến cái giải thuật: Vì chúng ta làm việc với file,đọc file,...nên chúng ta nghĩ ngay tới đối tượng File trong java. Ở đây,mình dùng một số cái lạ lẫm như sau:
Path path = Paths.get(filepath);
Charset charset = Charset.forName("US-ASCII");
Nói vậy thôi chứ dùng mấy cái này riết rồi cũng quen,rồi tiếp theo thì để đọc file nhanh nhanh thì dùng bufferedRender như thế này:
try (BufferedReader reader = Files.newBufferedReader(path, charset)) {
	String line = null;
	//biến count này dùng để đếm và xác định dòng hiện tại
	int count = 0;
	//gán giá trị đọc lên cho chuổi String line
	while ((line = reader.readLine()) != null) {
	//tách chuổi này ra theo dấu cách từng phần tử để thêm vào mãng
		String k[] = line.split(" ");
		//đầu tiên là dòng thứ nhất:dòng này thể hiện số đỉnh của đồ thị
		if (k.length == 1) {
		//khi ta kiểm tra chiều dài string bằng 1 tức là đang ở dòng 1.Dòng này giúp ta xác định được số phần tử trong mãng
		//nên từ đây ta khởi tạo luôn giá trị cho mãng
			this.arr = new int[Integer.parseInt(k[0])][Integer.parseInt(k[0])];
		} else {
		//Ở lần duyệt tiếp theo,chắc chắn không phải chiều dài chuổi là 1 nữa.
			for (int i = 0; i < k.length; i++) {
		//ở đây ta chỉ việc gán giá trị dòng count cột i với từng giá trị của mãng string vào ma trận kề của đồ thị là được
				this.arr[count][i] = Integer.parseInt(k[i]);
			}
		//Sau khi thực hiện xong thì ta tăng dòng lên
			count++;
		}
	}
	} catch (Exception e) {
		return false;
}
//cuối cùng thì trả về thôi
return true;
Đấy,trên đây là cách mình đã làm.Nếu các bạn có thắc mắc thì có thể comment bên dưới ,mình sẽ giải đáp cho các bạn nè.Ngoài ra, các bạn có thể xem video bên dưới để rõ hơn nhé.


Tạo tài khoản



Đăng nhập


Quên mật khẩu

Hoặc là :