我想通过IO流 读取raw或者assets下的txt文件 通过正则表达式找出匹配字符串来批量的将数据插入数据库
问题:我将方法写在databaseHelper 下的
问题:我将方法写在databaseHelper 下的
public void onCreate(SQLiteDatabase db)
中,想创建数据库和表后就初始化整个数据库[即插入完数据]. 在网上查了资料,对于文件的读取都是getAssets()等这种,但是我写在databaseHelper类里没有这个方法的 , 我用的是如下代码,那么那个filepath的路径该怎么获取,或者说只能用getAssets()方法而不能用java读取文件的方法吗? 如果是那么该怎么实现在创建数据库后就插完所有数据 以后不再插入,这个方法应该写在那里..
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table if not exists t_word(" +
"id integer primary key autoincrement," +
"word varchar(20),meaning varchar(50))"); //创建表结构
//测试批量插入
insertWord("filepath", db);
//这里的filepath该怎么获取到资源文件中的路径 不用getAssets()方法的话?
}
//读取文件 插入文本
public static void insertWord(String filepath,SQLiteDatabase db)throws Exception{
String word="";
BufferedReader br=new BufferedReader(new FileReader(filepath));
//读取字符并匹配处理
while((word=br.readLine())!=null){
word=word.trim();
//System.out.println("单词:"+word);
parse(word,db);
}
System.out.println("录入单词成功");
}
//匹配文本 并插入文本
private static void parse(String word,SQLiteDatabase db) throws Exception{
Pattern p=Pattern.compile("\\w*-");
Matcher m=p.matcher(word);
if(m.find()){
try {
String sql="insert into t_word(word,meaning) values(?,?)";
db.execSQL(sql, new Object[]{word.substring(m.start(), m.end()-1),
word.substring(+m.end(), word.length())});
} catch (Exception e) {
db.close();
}
}
}