นี่คือสิ่งที่ฉันทำในกิจกรรมสำหรับการอ่านบัฟเฟอร์ / ขยายเพื่อให้ตรงกับความต้องการของคุณ
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
}
}
}
แก้ไข: คำตอบของฉันอาจไร้ประโยชน์หากคำถามของคุณเกี่ยวกับวิธีการทำนอกกิจกรรม หากคำถามของคุณเป็นเพียงวิธีการอ่านไฟล์จากเนื้อหาคำตอบจะอยู่ด้านบน
อัปเดต :
หากต้องการเปิดไฟล์ที่ระบุประเภทเพียงเพิ่มประเภทในการเรียก InputStreamReader ดังต่อไปนี้
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
}
}
}
แก้ไข
ตามที่ @Stan กล่าวในความคิดเห็นรหัสที่ฉันให้ไม่ได้รวมบรรทัด mLineจะถูกแทนที่ทุกรอบ //process lineนั่นเป็นเหตุผลที่ผมเขียน ฉันถือว่าไฟล์มีข้อมูลบางประเภท (เช่นรายชื่อผู้ติดต่อ) และแต่ละบรรทัดควรประมวลผลแยกกัน
ในกรณีที่คุณต้องการโหลดไฟล์โดยไม่มีการประมวลผลใด ๆ คุณจะต้องสรุปผลรวมmLineในแต่ละรอบการใช้StringBuilder()และการต่อท้ายแต่ละรอบ
แก้ไขอีกต่อไป
จากความคิดเห็นของ @Vincent ฉันได้เพิ่มfinallyบล็อกนี้
โปรดทราบว่าใน Java 7 และสูงกว่าคุณสามารถใช้try-with-resourcesเพื่อใช้AutoCloseableและCloseableคุณสมบัติของ Java ล่าสุด
บริบท
ในจุดที่ความคิดเห็น @LunarWatcher ให้เห็นว่าgetAssets()เป็นในclass contextดังนั้นถ้าคุณเรียกมันว่านอกactivityคุณจำเป็นต้องอ้างถึงมันและส่งผ่านอินสแตนซ์บริบทของกิจกรรม
ContextInstance.getAssets();
นี่คือคำอธิบายในคำตอบของ @Maneesh ดังนั้นหากสิ่งนี้มีประโยชน์กับคุณถอนคำตอบของเขาเพราะเขาเป็นคนที่ชี้ให้เห็น