![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
お世話になっております。
現在テキストファイルを読み込み、それを表示する機能を作成しております。
単純に表示するだけでしたら作成できたのですが、後ほど応用したいので、下記のテキストファイルのデータを、名前なら「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;
}
}
No.2ベストアンサー
- 回答日時:
> 下記の場合だと表示がされませんでした。
コンパイル時、あるいは実行時に、何かエラーが出ていれば、それも記載したほうが良いですよ。
また既に指摘があるように前のご質問の補足として続けた方が良いですね。
あと、申し訳ありません。先のご質問の私の回答の一部が誤っておりました。それも踏まえて下記となります。
空白行はスキップし、全て読み込んだ後に表示させています。また、想定されるエラー処理は記述しておりません。
最大読み込み件数は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;
}
}
こちらの質問の仕方が悪いですね・・・申し訳ございません。
しかしご解答していただいて助かりました。まだまだ初心者でして、参考にして勉強していきたいと思います。
改めて御礼申し上げます。
No.3
- 回答日時:
少々ややこしくなっていますので、以下の様に整理してみてはいかがでしょうか?
// 最初に配列を用意
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]);
}
ご解答ありがとうございます。
ご解答していただいた内容を参考にしましたところ、無事解決いたしました。
また機会がありましたらよろしく御願い致します。
No.1
- 回答日時:
の続きですよね?
新しく質問立てる必要はなさそうですが…。
>System.out.println("名前 : " + name[0]);
>System.out.println("性別 : " + job[1]);
>System.out.println("年齢 : " + sex[2]);
添字([0]や[1]など)が固定値になっている理由を説明してください。
1行目を読み込んだ時点では他が読み込まれていないにも関わらず表示しようとしていることは理解されているのでしょうか?
先の質問の回答にもありますが、空行を読み込んだ場合にどうするのか指標はあるんでしょうか?
御礼が遅くなって申し訳ございません。
ご指摘いただいた点を修正して作成したところ、無事に表示することが出来ました。
こんな私のために何度もご解答していただいてありがとうございました。
また機会がありましたらよろしく御願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby vscode 文字化け 1 2022/05/21 19:17
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java java final 1 2022/06/10 22:49
- Ruby 教えてください 2 2023/01/04 17:50
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Javaの質問です。テキストファ...
-
[JAVA]エラーが解決できません。
-
テキストファイルにおいて任意...
-
入力文字列が数字かどうかの判別
-
equalsの逆
-
Java言語 漢字とひらがなの判別
-
yyyymmddからyyyy/mm/d...
-
Java int sum = 0は必要ですか?
-
C言語 重複しない4ケタの乱数...
-
java
-
ORA-01858: 数値を指定する箇所...
-
hiddenの値が期待した値で取得...
-
オブジェクトの中のプロパティ...
-
プログラミングの問題です。大...
-
System.err. printlnとSystem.o...
-
ダブルクォーテーションを含む...
-
ダブルクォーテーションのrepla...
-
Path型をString型へ変換する(Java)
-
javaで質問です。 文字列2023/2...
-
JAVAのServletで、画像表示につ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
yyyymmddからyyyy/mm/d...
-
equalsの逆
-
csv出力について
-
九九を横に表示する。
-
テキストファイルから空白行をよむ
-
Java int sum = 0は必要ですか?
-
[JAVA]エラーが解決できません。
-
javaのfor文が機能してないみた...
-
InputStream.read()でタイムア...
-
Servletでテキストボックスに入...
-
Javaでデータに登録する度にID...
-
Inputstreamについて
-
BufferedReaderでのエラー
-
FileクラスのcanRead/canWrite...
-
java連結
-
Java 読み込んだテキストファイ...
-
Javaの質問です。テキストファ...
-
テキストファイルの任意の文字...
-
Class.forNameでエラーになる
-
テキストファイルにおいて任意...
おすすめ情報