Calendar

September 2010
S M T W T F S
« Jul    
 1234
567891011
12131415161718
19202122232425
2627282930  

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

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • Facebook
  • Google Bookmarks
  • Live
  • MySpace
  • PDF
  • RSS
  • Twitter
  • Yahoo! Bookmarks
  • email

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">