dポイントプレゼントキャンペーン実施中!

お世話になっております。

現在テキストファイルを読み込み、それを表示する機能を作成しております。
単純に表示するだけでしたら作成できたのですが、後ほど応用したいので、下記のテキストファイルのデータを、名前なら「name」に、職業なら「job」に、性別なら「sex」にといったように、1行ずつ読み取ってそれぞれの配列に入れたいのですが、下記の場合だと表示がされませんでした。
最終的には、Personクラスなどでname,job,sexといったフィールドを作成したいです。

どなたかお力をお貸しください。よろしく御願い致します。

---------------------------//テキストファイル
田中
医者
男性

大林
SE
女性
---------------------------



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

class yomikomi{
private static String[] name;
private static String[] job;
private static String[] sex;

public static void main(String args[]){


int cate= 0; //カテゴリ 0:name 1:job 2:sex
try{
File file = new File("sample.txt");
if (checkBeforeReadfile(file)){
BufferedReader br = new BufferedReader(new FileReader(file));
String line = null;
int i=0;
while((line = br.readLine()) != null){

switch(cate){
case 0:

name[i] = line;
break;
case 1:

job[i] = line;
break;
case 2:
sex[i] = line;
break;
}
System.out.println("名前 : " + name[0]);
System.out.println("性別 : " + job[1]);
System.out.println("年齢 : " + sex[2]);
i = i +1;
cate = cate + 1;
if(cate > 2) {
cate = 0;
}
}

br.close();
}else{
System.out.println("ファイルが見つからないか開けません");
}
}catch(FileNotFoundException e){
System.out.println(e);
}catch(IOException e){
System.out.println(e);
}
}

private static boolean checkBeforeReadfile(File file){
if (file.exists()){
if (file.isFile() && file.canRead()){
return true;
}
}

return false;
}
}

A 回答 (3件)

> 下記の場合だと表示がされませんでした。



コンパイル時、あるいは実行時に、何かエラーが出ていれば、それも記載したほうが良いですよ。
また既に指摘があるように前のご質問の補足として続けた方が良いですね。

あと、申し訳ありません。先のご質問の私の回答の一部が誤っておりました。それも踏まえて下記となります。
空白行はスキップし、全て読み込んだ後に表示させています。また、想定されるエラー処理は記述しておりません。
最大読み込み件数は10件固定です。

※JAVAは詳しくないので、もっと適切な記述の仕方があるのかもしれません。


> 最終的には、Personクラスなどでname,job,sexといったフィールドを作成したいです。

これについて、回答する側としては何を答えれば良いのでしょうか?
Personクラスを用いたソースの提示ですか?
下記のソースは、Personクラスを使用しておりません。

---Yomikomi.java------------------------------------------------------
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

class Yomikomi{
private static String[] name = new String[10]; // 最大10件固定
private static String[] job = new String[10]; // 同上
private static String[] sex = new String[10]; // 同上

public static void main(String args[]){
try{
File file = new File("sample.txt");
if (checkBeforeReadfile(file)){
BufferedReader br = new BufferedReader(new FileReader(file));
String line = null;
int cate = 0; //カテゴリ 0:name 1:job 2:sex
int i = 0;
while((line = br.readLine()) != null){
if(line.length() == 0) continue; // 空白行スキップ
switch(cate){
case 0:
name[i] = line;
cate++;
break;
case 1:
job[i] = line;
cate++;
break;
case 2:
sex[i] = line;
i++; // 性別まで読み込んで初めて+1する。性別が最後のカテゴリであることが前提。
cate = 0; // 最後のカテゴリを読み込んだら0に戻す。
break;
}
}
br.close();

// 表示
i = 0;
while(name[i] != null){ // name[i]にデータがあれば表示
System.out.println("名前 : " + name[i]);
System.out.println("職業 : " + job[i]);
System.out.println("性別 : " + sex[i]);
i++;
}
}else{
System.out.println("ファイルが見つからないか開けません");
}
}catch(FileNotFoundException e){
System.out.println(e);
}catch(IOException e){
System.out.println(e);
}
}

private static boolean checkBeforeReadfile(File file){
if (file.exists()){
if (file.isFile() && file.canRead()){
return true;
}
}
return false;
}
}
    • good
    • 0
この回答へのお礼

こちらの質問の仕方が悪いですね・・・申し訳ございません。
しかしご解答していただいて助かりました。まだまだ初心者でして、参考にして勉強していきたいと思います。
改めて御礼申し上げます。

お礼日時:2016/01/25 23:54

少々ややこしくなっていますので、以下の様に整理してみてはいかがでしょうか?



// 最初に配列を用意
List<String> persons = new ArrayList(); // TODO Personクラス化する

// 名前職業性別をひとつに纏めたオブジェクトを、配列に追加する処理を繰り返す
何らかの繰り返し処理 {
_ String name = br.readLine();
_ String job = br.readLine();
_ String sex = br.readLine();
_ br.readLine(); // skip blank line
_ if (sex == null) break; // 繰り返しの終了
_ persons.add( String.join(", ", name, job, sex) ); // TODO Personクラス化する
}

// 配列から情報を取り出す
for (String p : persons) {
_ String[] record = p.split(", ");
_ System.out.println("名前: " + record[0]);
_ System.out.println("職業: " + record[1]);
_ System.out.println("性別: " + record[2]);
}
    • good
    • 0
この回答へのお礼

ご解答ありがとうございます。
ご解答していただいた内容を参考にしましたところ、無事解決いたしました。
また機会がありましたらよろしく御願い致します。

お礼日時:2016/01/25 23:57

http://oshiete.goo.ne.jp/qa/9159759.html
の続きですよね?
新しく質問立てる必要はなさそうですが…。

>System.out.println("名前 : " + name[0]);
>System.out.println("性別 : " + job[1]);
>System.out.println("年齢 : " + sex[2]);

添字([0]や[1]など)が固定値になっている理由を説明してください。
1行目を読み込んだ時点では他が読み込まれていないにも関わらず表示しようとしていることは理解されているのでしょうか?

先の質問の回答にもありますが、空行を読み込んだ場合にどうするのか指標はあるんでしょうか?
    • good
    • 0
この回答へのお礼

御礼が遅くなって申し訳ございません。
ご指摘いただいた点を修正して作成したところ、無事に表示することが出来ました。
こんな私のために何度もご解答していただいてありがとうございました。
また機会がありましたらよろしく御願い致します。

お礼日時:2016/01/25 23:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!