2012-10-31 58 views
6

Tôi đang đọc một tập tin văn bản và cố gắng lưu nó vào một mảng char bằng char. Cách tiếp cận của tôi (bên dưới) định nghĩa trước một mảng char với độ dài ban đầu là 100000 (vấn đề chính của tôi ở đây). Vì vậy, nếu tập tin chứa các ký tự nhỏ hơn số tiền đó (vấn đề cũng có nhiều ký tự hơn), thì có các giá trị null trong mảng của tôi. Tôi muốn tránh điều đó. Có cách nào để xác định trước số lượng ký tự có trong tệp văn bản không? Hoặc là có một cách tiếp cận tốt hơn hoàn toàn để lưu trữ các tập tin char bằng char?Đọc tập tin văn bản thành một mảng char trong Java

char buf[] = new char[100000]; 
FileReader fr = new FileReader(filename); 
BufferedReader br = new BufferedReader(fr); 
br.read(buf); 
for(int i = 0; i < buf.length; i++) 
{ 
    //Do stuff here 
} 

Trả lời

5

Sử dụng một ArrayList các ký tự để chấp nhận giá trị. Sau đó chuyển đổi ArrayList đến một mảng như

char[] resultArray = list.toArray(new char[list.size()]); 

Bạn nên sử dụng br.readLine() thay vì br.read() như sau:

String str; 
while((str = br.readLine())!=null){ 
     str.tocharArray(); 
} 
+0

Tôi đã thử nhưng phương thức br.read() chỉ chấp nhận mảng char. –

+1

sau đó không sử dụng br.read(), sử dụng br.readLine và nhận được chuỗi và sau đó trích xuất ký tự bằng string.toCharArray() – Arham

2

Sử dụng một máy quét thay!

Tôi sẽ sử dụng máy quét và đọc dòng thay vì char bằng char và sau đó lưu nó dưới dạng chuỗi. Nếu bạn thực sự muốn một mảng char nó dễ dàng hơn để có được nó ra sau đó.

chức năng này làm điều tương tự:

String theString = ""; 

File file = new File("data.txt"); 
Scanner scanner = new Scanner(file); 

theString = scanner.nextLine(); 
while (scanner.hasNextLine()) { 
     theString = theString + "\n" + scanner.nextLine(); 
} 

char[] charArray = theString.toCharArray(); 

Ưu điểm đến này là bạn có thể tận dụng lợi thế của Java String loại mà xử lý tất cả các chiều dài và nối kinh doanh khó chịu cho bạn. Và phương thức String.toCharArray() đã được xây dựng để trả về một mảng được tự động định cỡ theo cách bạn cần.

+0

bạn đang thêm một char bổ sung "\ n". Có lẽ bạn nên loại bỏ điều đó. – Arham

+0

Đọc trong char by char sẽ trả về một ký tự dòng mới cho mỗi dòng mới. Máy quét giả định rằng bạn chỉ muốn nội dung của dòng và trả về một chuỗi null kết thúc thay thế. Kết quả là nếu bạn muốn có một Chuỗi khổng lồ (được ám chỉ bởi độ dài ban đầu là 100000), bạn cần phải thêm lại các dữ liệu đó giữa các dữ liệu ký tự của mỗi dòng. (Nối chuỗi Java được loại bỏ các kết thúc null giữa các chuỗi nối) Tóm lại, đây là cách bạn cần làm để có được kết quả giống hệt nhau – darkpbj

+0

Tôi vẫn không thấy lý do tại sao bạn xử lý một cách rõ ràng "\ n" khi bạn không biết những gì trong tập tin. Bạn đang thêm noOfLines * new_line_chars vào mảng trong khi một cái sẽ chỉ muốn số ký tự mà anh ta đã viết trong tệp. Hãy thử chương trình của bạn chỉ với một dòng duy nhất và bạn sẽ hiểu. – Arham

Các vấn đề liên quan