[Help] BufferReader !!!

Hi myfriend!

Mình chưa hiểu rõ lắm về cách đọc ở trong BufferReader rồi đưa nó vào mảng chuỗi String sẽ khác với cách đưa vào mảng byte như thế nào?

Nếu đọc xong đưa vào mảng chuỗi String thì thông báo lỗi “NullPointerException” như trong hình vẽ, nhưng vẫn chạy bình thường được, ko biết là sao? Ko hiểu.

<img src=‘http://i.picasion.com/pic33/6833ae43671b6b0a09c27dac715e2314.gif’ border=‘0’ alt=‘user posted image’ />

Anh em nào biết được câu trả lời thì giải đáp giùm mình với.
Thank.

Thân!

Cái lỗi này đúng như bạn Hải nói.
Cái is_available của Huy là số bytes của file (hay là dung lượng của file đó) Chứ không fải số dòng trong file đó đâu.
VD: có file chứa thông tin như sau:
//// Bắt đầu
a
b
cdefg
/////
—>Yhì theo của bạn thì is_available =7 (7 bytes) ->Nhưng file thực chất có 3 dòng thôi
mà bạn:
str=new String[7];
for(int i=0;i<7;i++)
{
str*= đọc 1 dòng;
}
—>khi đọc 3 dòng thì OK nhưng đọc lần thứ 4 là lỗi.(vì lúc này đã cuối file)

Theo mình thì lỗi này liên quan đến kích thước của String
Huy thử debug xem sao.
Bạn in ra số phần tử của chuỗi và số line bạn reađLine() được xem nó có bằng nhau không.
Hoặc là chỗ for(i = ?;:wink: chỗ này cũng có thể phát sinh ra lỗi đó nếu bạn để ý không kỹ. Mình gặp lỗi này mấy lần và debug thì đều do kích thước của mảng cả…
Thử xem sao nha <!–emo&:D–><img src=‘http://www.uit.edu.vn/forum/html/emoticons/biggrin.gif’ border=‘0’ style=‘vertical-align:middle’ alt=‘biggrin.gif’ /><!–endemo–>

Sau khi đọc code của H thì mình đoán là thế này, H thử fix xem sao nha
Dòng
int is_available = input.available()
Nó sẽ không trả về số dòng của file input mà nó trả về 1 số integer là chiều dài của file thì phải.
Mà khi :
for(i = 0 ; I = STRING.length; … )
{
str* = BUFF.READLINE().====> lỗi 100% vì lúc này i đáng lẽ ra phải là số dòng của file input, còn i của H lại là độ dài của file input
}
Theo mình thì Huy nên viết thêm 1 hàm để đếm số dòng của file input
int so_dong_file_input(file input)
{
buff…
int sodong = 0;
String str = “”;
while((str == buff.readLine()) != null)
{
n ++;
}
return n;
}
<!–emo&B)–><img src=‘http://www.uit.edu.vn/forum/html/emoticons/cool.gif’ border=‘0’ style=‘vertical-align:middle’ alt=‘cool.gif’ /><!–endemo–>

@ Hải: Thank Hải. Đã sửa xong rồi nhỉ. ^^
@ Tuấn Anh: Oh, hèn gì sau khi nó in ra đủ nội dung xong thì phần còn dư nó hiển thị là null. Thank bạn Tuấn Anh nhé. ^^

Uả, có khởi tạo rồi mà nhỉ?
<img src=‘http://i.picasion.com/pic33/7b4f5a3cd26a12a746d16e0040e0bbe8.gif’ border=‘0’ alt=‘user posted image’ />
String str = new String[is_available]; // Biến toàn cục.
str* = br_buffer_reader.readLine();
// Cú pháp này không biết có phải đọc từng dòng xong thì gán cho một chuỗi tương ứng ko nhỉ?

Mảng String với byte khác nhau kiểu dữ liệu mà. BufferedReader chỉ là bộ đệm thôi. Nó phải dùng một luồng khác để phục vụ việc đọc dữ liệu. Lỗi Null của Huy hình như là lỗi String chưa được khởi tạo hoặc chưa gắn giá trị đó.