在Android上解析大型csv文件java

时间:2014-03-18 13:22:53

标签: java android database parsing csv

我有一个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();
            }
        }
    }

EDIT 添加了编码

1 个答案:

答案 0 :(得分:0)

有一种bulkInsert方法。它应该会提高性能。

据我所知,您正在本地阅读.csv文件。您可以在SQLite文件夹中发送带有效assets数据库的APK,而不是阅读.csv文件,然后您可以将文件移动到数据库文件夹,如下面链接中所述:

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