我的资源文件夹中有一个CSV文件。我需要我的程序获取CSV文件,然后将其数据插入SQLite中的表。
这是我当前的代码
FileReader file;
file = new FileReader("com.xylol.o_cha/assets/questions/question_bank.csv");
BufferedReader buffer = new BufferedReader(file);
String line = "";
String tableName ="O_CHA_QUESTIONS";
String columns = "QUESTION_ID, CATEGORY, ANIME TITLE, QUESTION_DESC, CHOICE1, CHOICE2, CHOICE3, CHOICE4, CORRECT_ANSWER, ANSWERED";
String str1 = "INSERT INTO " + tableName + " (" + columns + ") values(";
String str2 = ");";
database.beginTransaction();
while ((line = buffer.readLine()) != null) {
StringBuilder sb = new StringBuilder(str1);
String[] str = line.split(",");
sb.append("'" + str[0] + "',");
sb.append(str[1] + "',");
sb.append(str[2] + "',");
sb.append(str[3] + "'");
sb.append(str[4] + "'");
sb.append(str2);
database.execSQL(sb.toString());
}
database.setTransactionSuccessful();
database.endTransaction();
这是问题
09-23 05:47:29.436: W/System.err(7020): java.io.FileNotFoundException: /com.xylol.o_cha/assets/questions/question_bank.csv (No such file or directory)
09-23 05:47:29.465: W/System.err(7020): at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
09-23 05:47:29.465: W/System.err(7020): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:239)
09-23 05:47:29.473: W/System.err(7020): at java.io.FileInputStream.<init>(FileInputStream.java:88)
09-23 05:47:29.473: W/System.err(7020): at java.io.FileInputStream.<init>(FileInputStream.java:122)
09-23 05:47:29.473: W/System.err(7020): at java.io.FileReader.<init>(FileReader.java:66)
09-23 05:47:29.483: W/System.err(7020): at com.xylol.o_cha.Splash_Screen$1.run(Splash_Screen.java:73)
09-23 05:47:29.483: W/System.err(7020): at android.os.Handler.handleCallback(Handler.java:587)
09-23 05:47:29.493: W/System.err(7020): at android.os.Handler.dispatchMessage(Handler.java:92)
09-23 05:47:29.493: W/System.err(7020): at android.os.Looper.loop(Looper.java:132)
09-23 05:47:29.493: W/System.err(7020): at android.app.ActivityThread.main(ActivityThread.java:4025)
09-23 05:47:29.493: W/System.err(7020): at java.lang.reflect.Method.invokeNative(Native Method)
09-23 05:47:29.493: W/System.err(7020): at java.lang.reflect.Method.invoke(Method.java:491)
09-23 05:47:29.493: W/System.err(7020): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
09-23 05:47:29.503: W/System.err(7020): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
09-23 05:47:29.526: W/System.err(7020): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:3)
首先;你的代码有什么问题?您需要SQLiteHelper类和事务方法来创建Flex代码设计。
一些建议;
Ex: SimpleQuestion
。它可以让您轻松管理数据。)List<SimpleQuestion>
)代码:
private void readAndInsert() throws UnsupportedEncodingException {
ArrayList<SimpleQuestion> questions = new ArrayList<SimpleQuestion>();
AssetManager assetManager = getAssets();
InputStream is = null;
try {
is = assetManager.open("questions/question_bank.csv");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BufferedReader reader = null;
reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String line = "";
StringTokenizer st = null;
try {
while ((line = reader.readLine()) != null) {
st = new StringTokenizer(line, ",");
SimpleQuestion sQuestion= new SimpleQuestion ();
//your attributes
sQuestion.setX(st.nextToken());
sQuestion.setY(st.nextToken());
sQuestion.setZ(st.nextToken());
sQuestion.setW(st.nextToken());
questions .add(sQuestion);
}
} catch (IOException e) {
e.printStackTrace();
}
yourDB.bulkInsert(questions );
}
答案 1 :(得分:0)
对于读者csv,CSVReader比FileReader更好用。 找到open csv this link
的最新jar如何从资产中访问文件?
CSVReader reader = new CSVReader(new InputStreamReader(getAssets().open("questions/question_bank.csv")));
尝试这样使用CSV阅读器,这样你就可以拥有单个行的字符串数组
reader = new CSVReader(new FileReader(Environment.getExternalStorageDirectory()+"/folder/CSV/"+filename+".csv"));
try
{
List<String[]> myEntries = reader.readAll();
Log.d("size","size of LIST Quote======>"+myEntries.size());
if(myEntries.size()>0)
{
for(int i=0;i<myEntries.size();i++)
{
String arr[]=myEntries.get(i);
list11=new ArrayList<String>();
for(int k=0;k<arr.length;k++)
{
list11.add(arr[k]);
//Log.d("log is", "data size is==>"+arr[k]);
}
dba.insetdata_New_Qoute(list11, "tblNewQute");
}
}
}
catch (Exception e)
{
e.printStackTrace();
}