Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android上解析大型csv文件_Java_Android_Database_Parsing_Csv - Fatal编程技术网

Java 在Android上解析大型csv文件

Java 在Android上解析大型csv文件,java,android,database,parsing,csv,Java,Android,Database,Parsing,Csv,我有一个csv文件,你需要迁移数据库。 我创建了一个类来解析它并将其传输到数据库,但速度非常慢。 导入大约需要三分钟。有没有办法让它更快? 我为我的英语道歉。 提前谢谢 final String[] SCANCODES = {"CODEPRODUCT", "SCANCODE"}; dbSync.importCSV(SCANCODES, "SCANCODES.CSV", "SCANCODES"); //// ..... //// public void importCSV(String[]

我有一个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();
            }
        }
    }
final String[]SCANCODES={“CODEPRODUCT”,“SCANCODE”};
dbSync.importsv(SCANCODES,“SCANCODES.CSV”,“SCANCODES”);
////
.....
////
public void importsv(String[]tableCol、String nameFile、String nameTable){
最终文件数据库\u目录=新文件(
getExternalStorageDirectory(),“ImportExport”);
最终文件路径=新文件(数据库_目录,“SCANCODES.CSV”);
ContentValues cv=新的ContentValues();
BufferedReader br=null;
字符串s=“”;
布尔Skipline=true;
字符串[]数据;
db.beginTransaction();
试一试{
br=新的BufferedReader(新的InputStreamReader(新文件InputStream(路径),“Windows-1251”);
而((s=br.readLine())!=null){
//箕斗式掘进机
if(skipline){
skipLines=假;
继续;
}
//-1不要跳过空白
数据=s.split(“;”,-1);
对于(int i=0;i
编辑
添加了编码

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

据我所知,您正在本地阅读该.csv文件。无需读取.csv文件,您可以在
assets
文件夹中随附有效的
SQLite
数据库,然后只需将文件移动到databases文件夹,如下链接所述:


打开
读卡器时,您应该指定编码。我有这样的文件,这是交换数据的一种方式。它们不断更新,每次转换我都必须输入它们。bulkInsert方法将尝试,谢谢。如果您在线获取数据,我不知道除了bulkInsert()之外没有其他优化。你也可以这样做。在后台进行此长时间调用,并显示一个对话框,以便用户等待操作完成。我本想将文件映射到内存,但我有不同长度的数据,并且设置了读缓冲区,但我不能(感谢您的帮助,我将尝试)。