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 ก็เหมือนกันครับ