Problem when copy large file in android
หากใครเจอ IOException เวลา copy ไฟล์ โดยที่ มี message เป็น null
ปัญหานี้เกิดจากผมเอง เนื่องจากเขียนโปรแกรม eng-thai dict โดยมี database ขนาด 23Mb ซึ่งโดยปกติแล้ว database ของ android จะถูกเก็บไว้ใน /data/data/package/databases เมื่อเราต้องการนำ database ที่เราสร้างไว้แล้ว ไปใช้ในโปรแกรมของเรา เราก็ต้องทำการ copy ลงไปยัง path ดังกล่าว
ปัญหามันก็เกิดจากว่า ทุกครั้งที่รันโค๊ดที่ทำการ copy ไฟล์ จะเกิด IOException โดยไม่มี message ถ้าเจอแบบนี้ก็แสดงว่า เจอปัญหานี้แล้วหละครับ
1 2 3 4 5 6 7 8 9 | InputStream in = getAssets().open("thaidict"); OutputStream out = new FileOutputStream("/data/data/org.jiramot.android.dict/databases/thaidict.db"); byte[] buff = new byte[1024]; int len; while ( (len = in.read(buff) ) > 0 ){ out.write(buff, 0, len); } out.close(); in.close(); |
ตัวอย่างนี้คือ code ในการ copy ของ java ธรรมดา
แต่เนื่องจาก android ไม่สามารถอ้างอิงไฟล์ที่มีขนาดใหญ่ได้เกิน 1.2Mb มันก็เลยทำให้เกิด IOException ทำให้เราไม่สามารถ copy ไฟล์ได้
แต่สามารถแก้ได้โดย ทำการ split file ออกให้มีขนาดน้อยกว่า 1 Mb แล้วทำการ copy ไปรวมกัน แค่นี้ก็ได้แล้ว
ปล. ไม่ว่าจะ download มาหรือว่า copy จาก assets หรือ res/raw ก็เหมือนกันครับ