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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

4回答

7121閲覧

javaでのファイルの入出力について

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2015/11/16 13:30

「text.txt」
キー=キー値
name=Taro
age=15
birth=2000/10/15

上のような、テキストファイルを読み込んで、
各行の「=」より左の部分をキー、
「=」より右の部分を値とするマップを作成して、
マップからそれぞれの値を取り出して、
下のように2行目以降を表示させるプログラムを作りたいです。

name:Taro
age:15
birth:2000/10/15

2行目以降をただ表示させることは出来ましたが、
マップをからめて、"キー"と"値"を設定して、
表示させることができないので、
教えていただきたいです。

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.BufferedReader;

public class Test {

public static void main(String[] args) { FileReader reader = null; try { File file = new File("C:\\text.txt"); BufferedReader br = new BufferedReader(new FileReader(file)); System.out.println("2行目以降を1行ずつ表示:"); String buffer = br.readLine(); buffer = br.readLine(); while (buffer != null) { System.out.println(buffer); buffer = br.readLine(); } br.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } }

}

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

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

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

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

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

guest

回答4

0

ベストアンサー

1.文字列をキーと値に分割し、マップに格納

java

1//順序を保ちたいならLinkedHashMapが適している 2Map<String, String> map = new LinkedHashMap<String, String>(); 3while ((buffer = br.readLine()) != null) { 4 //文字列を引数と一致する場所で区切って配列にする 5 String[] str = buffer.split("="); 6 map.put(str[0], str[1]); //キーと値をマッピング 7}

2.マップからキー、値を取り出し表示

java

1//キー、値の組を取り出すSetを取り出し、ループ 2for(Map.Entry<String, String> e : map.entrySet()){ 3 //Entryが持つキーとそれにマッピングされた値を取り出して表示 4 System.out.println(e.getKey() + ":" + e.getValue()); 5}

投稿2015/11/16 14:10

swordone

総合スコア20649

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

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

0

name=taro=hanako
となっていた場合、 name => "taro=hanako" とするか? "name=taro" => "hanako" とするか? エラーにするか?
name==taro
となっていた場合、 "name=" => taro とするか? "name" => "=taro" とするか? エラーにするか?
name=
となっていたばあい "name" => "" とするか "name" => nill とするか、エラーにするか?
などの仕様を決めてから、実装をした方がよいかもしれません。

投稿2015/11/16 14:44

katoy

総合スコア22324

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

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

0

3段階で考えてみましょう。
1 まず、入力ファイルを読み込んで文字列を分割します。
2 分割した文字列をMapに格納します。1と2をファイルの終端まで繰り返します。
3 次にmapの内容をループ処理して、表示します。

入力ファイルの読み込みはできているようですので、文字列の分割です。String.split(String regex) メソッドを使ってみてください。

Map(Mapはinterfaceですので、HashMapとか、LinkedHashMapとか使ってください)の内容のループですが、次のようにしてIterator(反復子)を取得します。mapはMapのインスタンスとします。
Iterator it = map.keySet().iterator();
あとは、これをつかってキーをループさせることができますので、
while(it.hasNext())
{
key = it.next();
keyを使って、対応する値をmapから取得する
}

投稿2015/11/16 13:46

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

聞くよりも先に調べることをおすすめします。
検索例

細かいことになってしまうのですが
タイトルは質問内容に関係した内容にした方がいいと思います。
今回の場合、知りたい内容は「文字列の分割」と「Mapへの設定」の二つだと思います。

あと、当質問には関係しないことですが
finallyでreaderがnull以外の場合にclose処理をしていますが
このソースだとreaderは常にnullのはずです。

投稿2015/11/16 13:36

編集2015/11/16 13:55
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問