Java 在Android上解析大型csv文件
我有一个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[]
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()之外没有其他优化。你也可以这样做。在后台进行此长时间调用,并显示一个对话框,以便用户等待操作完成。我本想将文件映射到内存,但我有不同长度的数据,并且设置了读缓冲区,但我不能(感谢您的帮助,我将尝试)。