แยกไฟล์ csv ขนาดใหญ่ java บน Android

ฉันมีไฟล์ CSV คุณต้องย้ายฐานข้อมูล ฉันสร้างคลาสสำหรับการแยกวิเคราะห์และถ่ายโอนไปยังฐานข้อมูล แต่ค่อนข้างช้า การนำเข้าใช้เวลาประมาณสามนาที มีวิธีใดที่จะทำให้เร็วขึ้นหรือไม่? ฉันขอโทษสำหรับภาษาอังกฤษของฉัน ขอบคุณล่วงหน้า!

final String[] SCANCODES = {"CODEPRODUCT", "SCANCODE"};
dbSync.importCSV(SCANCODES, "SCANCODES.CSV", "SCANCODES");  

////
.....
////

public void importCSV(String[] tableCol, String nameFile, String nameTable) {
        final File DATABASE_DIRECTORY = new File(
        Environment.getExternalStorageDirectory(), "ImportExport");
        final File PATH = new File(DATABASE_DIRECTORY,"SCANCODES.CSV");
        ContentValues cv = new ContentValues();
        BufferedReader br = null;
        String s = "";
        boolean skipLines = true;
        String[] data;
        db.beginTransaction();
        try {
            br = new BufferedReader(new InputStreamReader(new FileInputStream(PATH), "Windows-1251"));
            while ((s = br.readLine()) != null) {
                //skip header
                   if (skipLines) {
                        skipLines = false;
                        continue;
                    }
                //- 1 not skip blank
                data = s.split(";", -1);
                for (int i = 0; i < data.length - 1; ++i) {
                    cv.put(tableCol[i], data[i]);
                }
                db.insert(nameTable, null, cv);
            }
            db.setTransactionSuccessful();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                db.endTransaction();
                br.close();
                new Folder().deleteFolder();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

แก้ไข เพิ่มการเข้ารหัส


person Dmitriy Dzyuba    schedule 18.03.2014    source แหล่งที่มา
comment
คุณควรระบุการเข้ารหัสเมื่อเปิด Reader   -  person fge    schedule 18.03.2014


คำตอบ (1)


มีวิธี bulkInsert ควรปรับปรุงประสิทธิภาพไม่น้อย

เท่าที่ฉันเข้าใจคุณกำลังอ่านไฟล์ .csv นั้นในเครื่อง แทนที่จะอ่านไฟล์ .csv คุณสามารถจัดส่ง APK ของคุณด้วยฐานข้อมูล SQLite ที่ถูกต้องในโฟลเดอร์ assets ของคุณ จากนั้นคุณก็สามารถย้ายไฟล์ไปยังโฟลเดอร์ฐานข้อมูลตามที่อธิบายไว้ในลิงก์ด้านล่าง:

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

person tasomaniac    schedule 18.03.2014
comment
ฉันมีไฟล์ดังกล่าวมันเป็นช่องทางในการแลกเปลี่ยนข้อมูล มีการอัปเดตอยู่ตลอดเวลา และฉันต้องป้อนการเปลี่ยนแปลงทุกครั้ง วิธี BulkInsert จะลองขอบคุณ - person Dmitriy Dzyuba; 18.03.2014
comment
หากคุณได้รับข้อมูลออนไลน์ ฉันไม่มี ไม่มีการเพิ่มประสิทธิภาพอื่นใดนอกจาก BulkInsert() คุณยังสามารถทำเช่นนี้ได้ ทำการโทรแบบยาวในเบื้องหลังและแสดงกล่องโต้ตอบความคืบหน้าเพื่อให้ผู้ใช้รอจนกว่าการดำเนินการจะเสร็จสิ้น - person tasomaniac; 18.03.2014
comment
ฉันคิดว่าจะทำให้ไฟล์แมปกับหน่วยความจำ แต่ฉันมีข้อมูลที่มีความยาวต่างกันและตั้งค่าบัฟเฟอร์การอ่านไม่ได้ (ขอบคุณสำหรับความช่วยเหลือ ฉันจะลอง) - person Dmitriy Dzyuba; 18.03.2014