- ベストアンサー
Androidアプリ作成でSDカードからデータを読み取って変換する方法
- Androidアプリ作成時に、SDカードに保存されているtxtファイルからデータを読み取り、int型に変換して処理を行い、再びstring型に戻す方法について教えてください。
- Eclipse IndigoのEclipse IDE for Java Developersを使用してAndroid2.3.3をターゲットにアプリを作成しています。SDカードに保存されているtxtファイルからstring型のデータを1行ずつ読み取り、int型に変換して処理を行った後、再びstring型に変換しようとしていますが、エラーで停止してしまいます。変換の仕方を試しているのですが、正常に変換されない問題についてどう対処すればいいのか教えてください。
- ファイルからの読み込みは正常に行えており、TextViewにセットすれば正しい結果が表示されます。しかし、データの変換がうまくいかずにエラーが発生してしまいます。どのように対処すればいいのか教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
lengthが1多いというのは、何らかの制御コード(改行などの見えないキャラクタ)が残っているんじゃないでしょうか。取り出したStringをtrimする(str.trim()で取り出す)とホワイトキャラクタは取り除けます。 それと、最初に配列を用意してからテキストの読み込みに入っていますが、こちらはwhileを使っていますね。ということは、テキストの行数が配列より多いと要素がたりなくなってエラーになりますが、そのあたりは大丈夫ですか? 配列をArrayListなどのコレクションにするか、あるいはwhileで繰り返すのをやめてforで配列の要素数の回数だけ読みこむようにするとかしたほうが安全では。
その他の回答 (2)
data.txtファイルをどういう環境で作ったかによる問題かもしれませんね。Windows環境で作っている場合、文字エンコードがutf-8じゃなかったり、改行コードがAndroid OSと異なっていたりの問題がありそうです。一行読み込んで、文字列を数値化する箇所を、文字列のcharAt(0)で一文字ぶん数値化してみてエラーが発生するか期待した文字コードと異なるようなら、エンコード違いが原因のように思いますし、これで問題なければ改行コードの違いが原因のように思います。バイナリエディタで当該ファイルを開いても見当はつくでしょう。
お礼
回答ありがとうございます。 chiiba_kunさんの指摘通りに修正したところきちんと予定通りに動作するようになりました。 改行コードに問題があったみたいです。 textファイルの形式など必要なことを書いておらず申し訳ありませんでした。 また何かあった場合はぜひよろしくお願いします。
- nag0720
- ベストアンサー率58% (1093/1860)
おそらくint型に変換するところでエラーになっているんでしょう。 とりあえず、 int num = List[0].length(); とでもして、List[0]の文字列の長さを調べてみてください。 読み込みが正しいなら長さは1のはずですが、1でない場合はそれぞれの桁の文字を確認してください。
お礼
chiiba_kunさんのご指摘の通りに修正したところ正常に動作するようになりました。 今回はchiiba_kunさんのをベストアンサーに選ばせていただきますが、また何かあったときはよろしくお願いします。
補足
回答ありがとうございます。 指摘されたように以下のように変更し、文字の長さを読み込んだところ、「2」が返ってきました。 int num = List[0].length(); data.txtの1行目を「2222」と変更してみるとnumは「5」となりました。 何故か文字数+1で返ってくるみたいです。 実機デバッグをできるようにしていなかったので、それぞれの桁の文字を確認することはできていないので、設定・確認次第お知らせさせてもらいます。 質問本文で書き損なっていましたが、txtファイルはUTF-8で作成しています。
お礼
回答ありがとうございます。 ご指摘の通り、str.trim()で制御コードをトリミングしてリストに格納するようにしたところ、その後のint型への変換、演算、string型への再変換が正しくできるようになりました。 List[i] = str.trim(); 大変助かりました。 またコードの書き方などもご指摘いただきありがとうございます。 データを増やすことはないだろうからwhileでいいかなと思っていましたが、forを使って配列の要素数分だけ読み込むようにします。 また何かあればよろしくお願いします。