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

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

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

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

Eclipse

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

Q&A

解決済

1回答

5555閲覧

Java:BufferedReaderでファイルを読み込むも表示されない!

nyan_engineer

総合スコア30

Java

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

Eclipse

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

0グッド

0クリップ

投稿2018/06/13 02:51

はじめに

初めてこちらで質問させていただきます。
よろしくお願いします。

前提・実現したいこと

テキストファイルを読み込み、指定の文字列を抜き出す
→いったんリストに保存し、読み込みが終了した後まとめて表示する

発生している問題・エラーメッセージ

エラーは発生していないが、コンソールに何も表示されない
→ファイルを読み込めていない?

該当のソースコード

Java

1import java.io.BufferedReader; 2import java.io.FileReader; 3import java.text.SimpleDateFormat; 4import java.util.ArrayList; 5import java.util.Date; 6import java.util.List; 7import java.util.Locale; 8 9public class Company { 10 11 public static void main(String[] args) throws Exception{ 12 13 //CompanyDataクラスのインスタンス化 14 CompanyData companyData = new CompanyData(); 15 16 //変数の設定 17 BufferedReader br = null; 18 String line; 19 int indexCompanyName,indexCeoName,indexEstablishmentDay; 20 int startIndex,endIndex; 21 String companyName,ceoName,establishmentDay; 22 23 //リストの設定 24 List <CompanyData> companyInfo = new ArrayList <CompanyData>(); 25 26 //ファイルの読み込み 27 br = new BufferedReader(new FileReader("C:\test.txt")); 28 29 30 while((line = br.readLine()) != null) { 31 32 //行に対象文字が存在するか 33 if(line.contains(ConstantObjects.MARK_COMPANY) 34 || line.contains(ConstantObjects.MARK_CEO) 35 || line.contains(ConstantObjects.MARK_ESTABLISHMENT_DAY)) 36 { 37 //出現位置の取得 38 indexCompanyName = line.indexOf(ConstantObjects.MARK_COMPANY); 39 indexCeoName = line.indexOf(ConstantObjects.MARK_CEO); 40 indexEstablishmentDay = line.indexOf(ConstantObjects.MARK_ESTABLISHMENT_DAY); 41 42 //対象文字列の取得 43 startIndex = indexCompanyName + (ConstantObjects.MARK_COMPANY).length(); 44 endIndex = line.indexOf(" ",indexCompanyName); 45 companyName = line.substring(startIndex, endIndex); 46 47 48 startIndex = indexCeoName + (ConstantObjects.MARK_CEO).length(); 49 endIndex = line.indexOf(" ",indexCeoName); 50 ceoName = line.substring(startIndex,endIndex); 51 52 53 startIndex = indexEstablishmentDay + (ConstantObjects.MARK_ESTABLISHMENT_DAY).length(); 54 endIndex = line.indexOf(" ",indexEstablishmentDay); 55 establishmentDay = line.substring(startIndex,endIndex); 56 57 //companyName,ceoNameをセット 58 companyData.setCompanyName(companyName); 59 companyData.setCeoName(ceoName); 60 61 //西暦→和暦に変換 62 SimpleDateFormat sdfENG = new SimpleDateFormat("yyyy年M月d日",Locale.ENGLISH); 63 Date date = sdfENG.parse(establishmentDay); 64 String establishmentDayJP = new SimpleDateFormat("GGGGyyyy年M月d日",new Locale("ja","JP","JP")).format(date); 65 66 //establishmentDayJPをセット 67 companyData.setEstablishmentDay(establishmentDayJP); 68 69 //リストへ格納 70 companyInfo.add(companyData); 71 } 72 } 73 74 for(CompanyData outputInfo:companyInfo) { 75 outputInfo.showCompanyProfile(); 76 } 77 78 br.close(); 79 } 80} 81

Java

1 2public class CompanyData { 3 4 5 private String companyName; 6 private String ceoName; 7 private String establishmentDay; 8 9 //companyNameのgetter,setterを設定 10 public String getCompanyName() { 11 return this.companyName; 12 } 13 14 public void setCompanyName(String companyName) { 15 this.companyName = companyName; 16 } 17 18 //ceoNameのgetter,setterを設定 19 public String getCeoName() { 20 return this.ceoName; 21 } 22 23 public void setCeoName(String ceoName) { 24 this.ceoName = ceoName; 25 } 26 27 28 //establishmentDayのgetter,setterを設定 29 public String getEstablishmentDay() { 30 return this.establishmentDay; 31 } 32 33 public void setEstablishmentDay(String establishmentDay) { 34 this.establishmentDay = establishmentDay; 35 } 36 37 //保存した値の表示メソッド 38 public void showCompanyProfile() { 39 System.out.println("会社名  " + getCompanyName()); 40 System.out.println("代表取締役" + getCeoName()); 41 System.out.println("設立日  " + getEstablishmentDay()); 42 } 43 44} 45

Java

1 2public class ConstantObjects { 3 4 //固定値 5 static String MARK_COMPANY = "会社名"; 6 static String MARK_CEO = "代表取締役"; 7 static String MARK_ESTABLISHMENT_DAY = "設立日"; 8} 9

試したこと

リストに保存されていない?
→保存せずに直接表示させようと試みるも表示されず

終わりに

最後までご覧いただきありがとうございます。
何か気づいた点ございましたらコメントいただければ幸いです!

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーは発生していないが、コンソールに何も表示されない
→ファイルを読み込めていない?

ファイルが存在しなければ「FileNotFoundException」が発生するので、おそらくファイルはあるのでしょう。

//ファイルの読み込み br = new BufferedReader(new FileReader("C:\test.txt"));

↑(1)で、このファイルにはちゃんと1行以上のレコードが書かれているのですか?

また、

//行に対象文字が存在するか if(line.contains(ConstantObjects.MARK_COMPANY) || line.contains(ConstantObjects.MARK_CEO) || line.contains(ConstantObjects.MARK_ESTABLISHMENT_DAY)) {

↑このブロックに入らなければcompanyInfoにデータが登録されない訳ですが、

//固定値 static String MARK_COMPANY = "会社名"; static String MARK_CEO = "代表取締役"; static String MARK_ESTABLISHMENT_DAY = "設立日";

↑(2)ファイルの各行にこれらの文字列は含まれているのでしょうか?

追記

//ファイルの読み込み br = new BufferedReader(new FileReader("C:\test.txt"));

↑このファイル内データの文字エンコーディングは何でしょう?
読み込みファイルの文字エンコーディングを指定する必要があるかもしれません。

投稿2018/06/13 03:05

編集2018/06/13 03:27
tkturbo

総合スコア5572

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

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

nyan_engineer

2018/06/13 03:15

早速の回答、ありがとうございます。感謝します。 ① //ファイルの読み込み br = new BufferedReader(new FileReader("C:\test.txt")); ↑1行以上のレコード、書かれております。全部で50行のレコードです。(最初の2行は改行となっています) //行に対象文字が存在するか if(line.contains(ConstantObjects.MARK_COMPANY) || line.contains(ConstantObjects.MARK_CEO) || line.contains(ConstantObjects.MARK_ESTABLISHMENT_DAY)) { ↑こちらは最初の13行目までに対象の文字列はなく、14/17/20/23/26/29/32/35/38行目にあります。
tkturbo

2018/06/13 03:27

回答本文に質問を追記しました。
nyan_engineer

2018/06/13 03:35

文字エンコードが「ANSI」になってました! 「UTF-8」に変更したところ、以下のエラー文です。 Exception in thread "main" java.text.ParseException: Unparseable date: ":2012年4月1日" at java.text.DateFormat.parse(DateFormat.java:366) at Company.main(Company.java:63) 日付変換が上手くいってないですね。。
tkturbo

2018/06/13 03:41

> Unparseable date: ":2012年4月1日" ↑データに余計な「:」がついているのがParseExceptionの原因ですね。
nyan_engineer

2018/06/13 04:04

ありがとうございます! エラーも読めないポンコツですみません。。 何とかコンソールに表示はされましたが、最後の行情報しか出てこないという新たな問題が発生しました。。 ただ、ここの質問とは主旨がずれるので終わりにしたいと思います。 tkturboさん、本当にありがとうございました!
tkturbo

2018/06/13 04:10

> 最後の行情報しか出てこない ↑たぶん、新規に質問されるのでしょうが、先に答え合わせ。 ループの外でCompanyDataインスタンスを生成して、そのインスタンスをループ内で使いまわしているため、「同一インスタンスに値をセットし続ける=>結果として最後に処理した行の値でCompanyDataインスタンスが更新される」という現象が起きているのです。
nyan_engineer

2018/06/13 04:27

ああ、、、全て解決しました。。。 神様ですありがとうございます。 また質問を出した際には是非とも宜しくお願い致します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問