Parsing file csv besar java di Android

Saya punya file csv, Anda perlu memigrasi database. Saya membuat kelas untuk parsing dan transfer ke database, tetapi cukup lambat. Impor memakan waktu sekitar tiga menit. Apakah ada cara untuk membuatnya lebih cepat? Saya minta maaf atas bahasa Inggris saya. Terima kasih sebelumnya!

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();
            }
        }
    }

EDIT Menambahkan pengkodean


person Dmitriy Dzyuba    schedule 18.03.2014    source sumber
comment
Anda harus menentukan pengkodean saat membuka Reader   -  person fge    schedule 18.03.2014


Jawaban (1)


Ada metode bulkInsert. Ini akan sedikit meningkatkan kinerja.

Sejauh yang saya mengerti Anda membaca file .csv itu secara lokal. Daripada membaca file .csv, Anda dapat mengirimkan APK Anda dengan database SQLite yang valid di folder assets, lalu Anda cukup memindahkan file tersebut ke folder databases seperti yang dijelaskan dalam tautan di bawah ini:

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

person tasomaniac    schedule 18.03.2014
comment
Saya punya file seperti itu, itu adalah sarana pertukaran data. Mereka terus diperbarui, dan saya harus memasukkannya setiap transisi. Metode bulkInsert akan mencoba terima kasih. - person Dmitriy Dzyuba; 18.03.2014
comment
Jika Anda mendapatkan data secara online, saya tidak tahu, tidak ada optimasi lain selain bulkInsert(). Anda juga bisa melakukan ini. Lakukan panggilan panjang ini di latar belakang dan tampilkan dialog kemajuan sehingga pengguna menunggu hingga operasi selesai. - person tasomaniac; 18.03.2014
comment
Saya berpikir untuk membuat file dipetakan ke memori, tetapi saya memiliki data dengan panjang yang bervariasi dan saya tidak dapat mengatur buffer baca (Terima kasih atas bantuannya, saya akan mencoba. - person Dmitriy Dzyuba; 18.03.2014