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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

3回答

2171閲覧

ファイル(java)を読み込む時に、連結してしまう。

edoooooo

総合スコア476

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2017/04/02 13:26

編集2017/04/02 15:28

dataへ日付を読み込みたいのですが、2行目以降と指定しているため、
内容(content)と日付(data)が全て、内容の欄に表示されてしまいます。
どうすれば良いのでしょうか?
どうぞアドバイスの方をよろしくお願いいたします。

ファイル読み込みのコードです。

java

1// タイトル、内容が空白の場合、保存しない 2 if (title.isEmpty() || content.isEmpty()) { 3 Toast.makeText(this, R.string.msg_destruction, Toast.LENGTH_SHORT).show(); 4 }else { 5 6 7 // 保存 8 OutputStream out = null; 9 PrintWriter writer = null; 10 try { 11 out = this.openFileOutput(mFileName, Context.MODE_PRIVATE); 12 writer = new PrintWriter(new OutputStreamWriter(out, "UTF-8")); 13 // タイトル書き込み 14 writer.println(title); 15 // 内容書き込み 16 writer.println(content); 17 18 //・・・・・実行日書き込み 19 writer.println(data); 20 21 22 writer.close(); 23 out.close(); 24 25 //保存に成功しました。 26 Toast.makeText(this, R.string.msg_upd, Toast.LENGTH_SHORT).show(); 27

java

1 2 InputStream in = this.openFileInput(fileName); 3 BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8")); 4 // タイトル(1行目)を読み込み 5 title = reader.readLine(); 6 7 8 // 内容(2行目以降)を読み込み 9 char[] buf = new char[(int)files[i].length()]; 10 int num = reader.read(buf); 11 content = new String(buf, 0, num); 12 13//data= 14 //ここでdataへ日付を読み込みたいのですが、2行目以降と指定しているため、 15 //内容(content)と日付(data)が全て、内容の欄に表示されてしまいます。 16 17 // ファイルクローズ 18 reader.close(); 19 in.close(); 20 } catch (Exception e) { 21 Toast.makeText(this, "error", Toast.LENGTH_LONG).show(); 22 } 23 24 // ListView用のアダプタにデータをセット 25 Map<String, String> map = new HashMap<String, String>(); 26 map.put("filename", fileName); 27 map.put("title", title); 28 map.put("content", content); 29 //map.put("data",data); 30 mList.add(map);

イメージ説明

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

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

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

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

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

swordone

2017/04/02 13:36

そもそものファイルの中身はどういう形式なのでしょうか?各行が"内容 日付"のようになっているのでしょうか?
edoooooo

2017/04/02 13:47 編集

ファイルの中身は、mapで、filename、title、contentをputしていて、data(日付)は、 // 内容(2行目以降)を読み込み このようになってしまっているためdataに代入できていません。 おっしゃられていることとずれていましたら申し訳ありません。 mapにputしているコードを追加しました。よろしくお願いいたします。
swordone

2017/04/02 13:53

テキストファイルを読み込んでいるわけではないのですか?
edoooooo

2017/04/02 13:58

MainActivityで、テキストファイルを読み込んで、ListView用のAdapterにセットしています。
swordone

2017/04/02 14:00

そのテキストファイル内のテキストの形式を聞いているのですが。
edoooooo

2017/04/02 14:03

// テキストファイル(*.txt)を取得し、ListView用アダプタのリストにセット for (int i=0; i<files.length; i++) { String fileName = files[i].getName(); if (files[i].isFile() && fileName.endsWith(".txt")) { このコードのようにテキストファイルの形式は、txt形式ということであっているでしょうか?。
swordone

2017/04/02 14:11

ファイル「内」と言ってますよね?ファイルの中でどういう形でデータを記述しているのかと聞いています。
edoooooo

2017/04/02 14:22

Map<String, String> map = new HashMap<String, String>();のようにMapで記述しています。答えになっていなかったらすみません。
swordone

2017/04/02 14:27

だから、「読み込むテキストファイル」の話をしているのに、なぜソースコードの話を続けるのですか?
edoooooo

2017/04/02 14:41

読み込むテキストファイルは、新しく追加した画像のように、タイトル、内容、日付に分けています。 textからgetしたものをwriter.println(title); // 内容書き込み writer.println(content); //・・・・・実行日書き込み writer.println(data);のようにしています。 これもソースコードの話でしたら申し訳ありません。ふざけているわけではないのです。
swordone

2017/04/02 14:47

残念ながら画像が入っていないので、もう一回編集していただけますか?
edoooooo

2017/04/02 14:51

追加しました。
swordone

2017/04/02 14:54

読み込むテキストファイルの、最初の数行でいいので示してください。
uniko

2017/04/02 14:57

長文失礼です。質問者さん。openFileInputで読み込んでいるテキストファイルの中はどのような「テキストの内容」になっているかを単純に聞いておられるかと。。例えば「タイトル本文日付」という内容なのか「タイトル(改行)本文(改行)日付」という内容なのかそういった中身のお話。。。
swordone

2017/04/02 15:16

なぜここでパタと更新が切れるんですかね
uniko

2017/04/02 15:19

多分テキストの中身までは把握できてなかったのかと推測です。
edoooooo

2017/04/02 15:27 編集

printlnとしているので、タイトル(改行)本文(改行)日付 だと考えています。 コードを追加しました。
swordone

2017/04/02 15:30

人の話聞く気ないならもういいです
edoooooo

2017/04/02 15:31

テキストの中身とのことですが、確認する方法がわからずテキストファイルを読み込むコードとなっていました。申し訳ありません。
swordone

2017/04/02 15:36

自分で確認できないテキストファイルを読み込もうとしているのですか?
edoooooo

2017/04/02 15:45

自分のアプリの中で入力し、作成したテキストファイルを読み込もうとしています。保存先を確認することはできませんでした。
guest

回答3

0

swordoneさんが回答されてから質問に「テキストを書き込むコードが追記された」と思います。

これを見ると以下のようにtitle,content,dateをそれぞれ改行付きで出力していますね。

java

1writer.println(title); 2writer.println(content); 3writer.println(date);

contentが1行なのか複数行なのか若干気になりますが(画面の画像を見る限り1行としているように見えるので)1行だと仮定すると、と読み込みは以下でよいことになります。

java

1String title = reader.readLine(); 2String content = reader.readLine(); 3String date = reader.readLine();

(これを行うのにsplitは必要なく、もしテキストの内容がどうなっているかが質問文に明記されていればswordoneさんがsplitを持ち出すことはなかったと思います。)

ところで本当にこのとおりなら逆に質問者さんがなぜ解決できなかったのかに疑問が残ります。これは単なる推測ですが、本来は画面は次のようになっているべきだったのではないかと思えてきます。

+-----------------------------+ |タイトル: |<-1行 +-----------------------------+ |内容: |<-複数行 | | | | | | +-----------------------------+ |日付: |<-1行 +-----------------------------+

つまりそもそもの問題は「contentが1行か複数行かが質問者さんご自身にとって曖昧」だったのではないかな?とそんなふうに感じました。複数行にすべきなのであれば解決策は上記のコードとは違ったものになります。

投稿2017/04/02 17:52

KSwordOfHaste

総合スコア18392

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

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

edoooooo

2017/04/02 17:59

ありがとうございます。 自分の説明不足もあり、申し訳ありませんでした。  Todoリストを作っており、本文のcontentは、複数行となる場合も考慮しようと考えていたのですが、 一通りのアプリを作り終えたらデータベース版も作成することを考えていたため、1行ずつのコードとして完成させようと考えておりました。 swordoneさんがおっしゃられていた、txtの内容とはこういうことだったのですね!それがわ買っていませんでした。  1行ずつ読み込むコードで無事に動いています。ありがとうございます。
swordone

2017/04/03 16:49

これでわからなかったとか、俺はどう聞けばよかったと言うんだ…。
edoooooo

2017/04/03 17:24

すみません。txtの内容をKSwordOfHasteさんが送ってくれたような図にして、表せるということを知らなかったということです。
swordone

2017/04/03 23:35

だめだ、まだわかってない…。
edoooooo

2017/04/04 10:43

contentが1行か複数行かが ということですよね?
swordone

2017/04/04 13:19

全く違います。
guest

0

ベストアンサー

内容が示されないのでとりあえず回答しますが、
そもそもBufferedReaderを使っておきながらなぜ煩雑なreadメソッドを使っているのかが謎。
それならBufferedReaderを使う意味は皆無で、InputStreamReaderをそのまま使えばいい話。
一般的にはreadLineで行ごと文字列として読み込み、splitなどで分割して使う。

投稿2017/04/02 15:25

swordone

総合スコア20649

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

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

edoooooo

2017/04/02 15:34

意図にそぐわない回答で申し訳ありませんでした。 readLineで行ごと文字列として読み込み、splitで分割し、表示したいと思います。
swordone

2017/04/02 15:45

細かいけど、「日付」ならdataではなくdate
edoooooo

2017/04/02 16:06

ありがとうございます。 直します!
guest

0

①前提条件が何で
②どういう結果を得たくて
③現状具体的にどういう現象が起こっているのか
というのを具体的に書きましょう。書いてるコードから察してくれと言っているようなものです。

アウトプットしたテキストファイルは一行目がタイトルで、二行目以降は本文、最終行に日付
という認識ですよね。たぶん。
でやりたいことはtitle(タイトル)とdate(日付)とcontents(本文)をそれぞれ分離してテキストファイルから取得したいと。たぶん。
BufferedReaderをwhile文で流してreadLineで全文くっつけて正規表現で改行(CRLFですかね)数を数えて1行目と最終行を抜き出すという力技ならさくっとできなくもないです。単純にカウントアップでもいいですね。

投稿2017/04/02 16:28

編集2017/04/02 16:34
tony

総合スコア86

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

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

edoooooo

2017/04/02 16:37

ありがとうございます。 次からは、条件、結果、実際の動きをはっきり記入します。 やはり、このような複雑な結果を改善するためのデータベースなのですね!、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問