2016-03-23 14 views
-1

私のSQLiteデータベースにCSVファイルを読み込もうとしています。私は現在、メソッドを実行するためにボタンを使用しています。どこに呼び出すのかわからないため、アプリケーションの起動時にデータをロードします。私が起動画面の作成時にそれを呼び出すと、問題があります。Android CSVのインポートに関する問題

これはエラーです。

によって引き起こさ:java.io.FileNotFoundException:C:/ユーザー/ b00619342 /ダウンロード/ VegT(DBCodedNeedPreSetD)/app/src/main/assets/brekfasttable.csv:オープンに失敗しました:ENOENT(そのようなファイルやディレクトリ)

HERESにコード

public void brekCSV() throws IOException { 

    String[] row = null; 
    //need to change when the project is moved to a new location 
    String csvBrek = "C:/Users/b00619342/Downloads/VegT(DBCodedNeedPreSetD)/app/src/main/assets/brekfasttable.csv"; 

    SQLiteDatabase db = getWritableDatabase(); 

    BufferedReader br = new BufferedReader(new FileReader(csvBrek)); 

    String line; 
    while ((line = br.readLine()) != null) { 
     String[] tokens = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)", -1); 

     db.execSQL("INSERT INTO " + TABLE_BREK + 
       "VALUES(" + tokens[0] + "," + tokens[1] + "," + tokens[2] + "," + tokens[3] + "," + tokens[4] + "," + tokens[5] + "," + tokens[6] + ")"); 
    } 

    db.close(); 

}//end of brekCSV 

答えて

1

あなたのAndroidデバイスは、Windowsデスクトップではありません。 "C:"はありません。ファイルをデバイスに配置し、コードが実行されているデバイス上の正しいパスを使用する必要があります。

+0

私は現在のAndroid Studioのエミュレータを使用しています申し訳ありません! – Andrew

+0

エミュレートされたデバイスはまだWindowsデスクトップPCではありません。エミュレータは、実際のデバイスのハードウェア全体を模倣し、Androidオペレーティングシステムを実行します。エミュレータをホストしているWindowsシステムを認識していません。これは、ハードウェアを支払う必要なく、実際のデバイスのようになることを意図しています。 – dsh

+0

['adb push'](https://developer.android.com/tools/help/adb.html)を使って、ファイルをWindowsシステムから(エミュレートされた)デバイスのsdcardにコピーすることができます。 – dsh

0

バッファリーダーの読み取りファイルには、次のコードを使用します。

String filename="brekfasttable.csv"; 
     try { 
      BufferedReader br = new BufferedReader(new InputStreamReader(getApplicationContext().getAssets().open(filename))); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

または

String filename="brekfasttable.csv"; 
     try { 
      BufferedReader br = new BufferedReader(new InputStreamReader(mainMenu.this.getAssets().open(filename))); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
+0

これを試して、 "シンボルコンテキストを解決できません" – Andrew

+0

あなたのコンテキストをあなたのアクティビティ名と置き換えても問題ありません。これはActivityA.thisのようです –

+0

私の活動はmainMenuと呼ばれていますが、 。 BufferedReader br = new BufferedReader(新しいInputStreamReader(mainMenu.getAssets()。open(ファイル名))); – Andrew