Dưới đây là những gì tôi làm trong một hoạt động để đọc / mở rộng bộ đệm để phù hợp với nhu cầu của bạn
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("filename.txt")));
// do reading, usually loop until end of file reading
String mLine;
while ((mLine = reader.readLine()) != null) {
//process line
...
}
} catch (IOException e) {
//log the exception
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
//log the exception
}
}
}
EDIT: Câu trả lời của tôi có lẽ là vô ích nếu câu hỏi của bạn là làm thế nào để thực hiện nó bên ngoài một hoạt động. Nếu câu hỏi của bạn chỉ đơn giản là làm thế nào để đọc một tệp từ tài sản thì câu trả lời là ở trên.
CẬP NHẬT :
Để mở tệp chỉ định loại, chỉ cần thêm loại trong lệnh gọi InputStreamReader như sau.
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("filename.txt"), "UTF-8"));
// do reading, usually loop until end of file reading
String mLine;
while ((mLine = reader.readLine()) != null) {
//process line
...
}
} catch (IOException e) {
//log the exception
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
//log the exception
}
}
}
BIÊN TẬP
Như @Stan nói trong bình luận, mã tôi đang đưa ra không phải là tóm tắt các dòng. mLine
được thay thế mỗi lần vượt qua. Đó là lý do tại sao tôi viết //process line
. Tôi giả sử tệp chứa một số loại dữ liệu (ví dụ: danh sách liên hệ) và mỗi dòng nên được xử lý riêng.
Trong trường hợp bạn chỉ muốn tải tệp mà không cần bất kỳ loại xử lý nào, bạn sẽ phải tổng hợp mLine
tại mỗi lượt sử dụng StringBuilder()
và nối thêm mỗi lượt.
EDIT KHÁC
Theo nhận xét của @Vincent tôi đã thêm finally
khối.
Cũng lưu ý rằng trong Java 7 trở lên, bạn có thể sử dụng try-with-resources
để sử dụng các tính năng AutoCloseable
và Closeable
tính năng của Java gần đây.
BỐI CẢNH
Trong một bình luận @LunarWatcher chỉ ra rằng đó getAssets()
là mộtclass
trong context
. Vì vậy, nếu bạn gọi nó bên ngoài một activity
bạn cần tham khảo nó và chuyển thể hiện ngữ cảnh cho hoạt động.
ContextInstance.getAssets();
Điều này được giải thích trong câu trả lời của @Maneesh. Vì vậy, nếu điều này hữu ích cho bạn, hãy nêu lên câu trả lời của anh ấy bởi vì đó là người đã chỉ ra điều đó.