Lỗi khi đọc file trong java

xin chào các anh chị em trong dạy nhau học , em là người mới nên có gì sai mong đừng gạch đá em

em muốn hỏi về cách đọc file trong java, em có đoạn txt như sau:

nguyen van a
12
9.0

em code để đọc file như sau:

package fileTest;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class demo_1 {
	public static void main(String[]args) throws FileNotFoundException {
		String s="";
		String name = "";
		int grade = 0;
		double point = 0d;
		double sum = 0.0;
		try ( DataInputStream data = new DataInputStream (new BufferedInputStream(new FileInputStream("D:\\test.txt"))) ){
			while(true) {
				name = data.readUTF();
				grade = data.readInt();
				point = data.readDouble();
				sum += point;
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		finally {
		System.out.println(sum);
		}
	}
}

nó báo lỗi như sau:

java.io.EOFException
	at java.io.DataInputStream.readFully(Unknown Source)
	at java.io.DataInputStream.readUTF(Unknown Source)
	at java.io.DataInputStream.readUTF(Unknown Source)
	at fileTest.demo_1.main(demo_1.java:21)
0.0

các anh em có cách nào không chỉ em với ? em google rồi mà nó toàn nói chung chung thôi

Format lại code bằng markdown đi bạn. Cho code vào giữa 2 cặp dấu ```

1 Like

Đây là lỗi bạn cố tình đọc file khi mà đã đọc đến cuối file rồi. Xem code của bạn thì chỉ thấy while (true) là vòng lặp vô hạn nhưng không có chỗ nào để dừng cả

3 Likes

em đã sữa thành như sau nhưng vẫn lỗi trên:

package fileTest;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class demo_1 {
	public static void main(String[]args) throws FileNotFoundException {
		String i = "";
		String name = "";
		int grade = 0;
		double point = 0d;
		double sum = 0.0;
		try ( DataInputStream data = new DataInputStream (new BufferedInputStream(new FileInputStream("D:\\test.txt"))) ){
			while((i = data.readLine()) != null) {
				name = data.readUTF();
				grade = data.readInt();
				point = data.readDouble();
				sum += point;
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		finally {
		System.out.println(sum);
		}
	}
}

Bản chất tất cả các hàm bắt đầu bằng read đều không thể dùng để check xem đã đọc đến cuối file hay chưa do nó đều throw exception nếu cố tình read khi đã đến cuối file. Bạn nên dùng hàm available để check xem có thể read tiếp không nhé

2 Likes

Nó có lỗi do bạn in lỗi ra thôi.
Chương trình vẫn chạy mà.
Bắt ngoại lệ (EOFException) và không in là xong.

1 Like

mình có chút ý kiến nhỏ như sau nhé:

  1. code ban đầu của b nên sửa 1 chút kiểu: khi b dùng i = data.readline thì bản chất bạn đã đọc line đó vào i r nên b ko nên dùng data.readutf hay int double nữa mà hãy check xem line của b hay i value là gì convert cho đúng r in ra. bởi data đọc theo line ko phải mảng mà readline xong b lại dùng 3 read utf với int.
  2. bạn nên để biến data ra ngoài catch để finally sau đó check data <>null thì close lại bởi dùng code tất cả biến khởi tạo liên quan đến connection hay in/out stream nên close sau khi dùng.

mong bạn tham khảo hu vọng hữu ích thanks

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