質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

7918閲覧

csvファイルを読み込む時に改行コードがあると次の文字列として認識される

SmartBuzz

総合スコア81

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2016/12/23 06:53

アプリ上でメモを作っています。
これをStringでSQLiteで保存しています。

このSQLiteをバックアップしたファイルをインポートする際に今回の質問の問題が発生します。

このメモが1行の時は問題ないのですが、2行目になったときにエクセプションが発生します。
==exceptionメッセージ==

落ちる原因は

java

1 private void importTable(Context context, SQLiteDatabase db, String tableName){ 2 BufferedReader bufferedReader = null; 3 boolean beginedTransaction = false; 4 5 try { 6 File file = new File(context.getFilesDir(), tableName + ".csv"); 7 FileInputStream fis = new FileInputStream(file); 8 bufferedReader = new BufferedReader(new InputStreamReader(fis)); 9 10 db.beginTransaction(); 11 beginedTransaction = true; 12 13 String line; 14 while((line = bufferedReader.readLine()) != null ){ 15 String[] values = line.split(",", -1); 16 StringBuilder stringBuilder = new StringBuilder(); 17 stringBuilder.append("INSERT INTO " + tableName + " VALUES("); 18 for(String value : values){ 19 stringBuilder.append("\"" + value + "\","); 20 } 21 stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(",")); 22 stringBuilder.append(");"); 23 db.execSQL(stringBuilder.toString()); 24 } 25 db.setTransactionSuccessful(); 26 27 } 28 catch (IOException e) { 29 e.printStackTrace(); 30 } 31 finally { 32 if( bufferedReader != null ) { 33 try { bufferedReader.close(); } catch( Exception e ) {}; 34 } 35 36 if( beginedTransaction ) { 37 db.endTransaction(); 38 } 39 } 40 }

このコードのString lineのところで、メモの1行目しか取れていないことが原因だとわかりました。
1行目しか取れていないので、2行目分だ怪我残って他の行データがないのに2回目のwhileが始まるので落ちてしまうのが原因です。

おそらく改行コードの「\n」があるから、buffereReaderで切断した状態で入ってくるのかなと思うのですが、どういった解決方法がありますか?

教えて下さい。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2016/12/23 10:48

例外スタックトレースを掲載していただきたいです。
guest

回答1

0

自己解決

改行コードを独自に定義した「¥@n」(この独自コードには自信がないのでもっといい置き換え文字を知りたい…)に置き換えて、ReadLineに入れるようにした。

投稿2016/12/23 07:29

SmartBuzz

総合スコア81

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問