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

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

ただいまの
回答率

90.84%

  • Java

    12517questions

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

  • Eclipse

    1530questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 96

 はじめに

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

 前提・実現したいこと

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

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

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

 該当のソースコード

import java.io.BufferedReader;
import java.io.FileReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

public class Company {

    public static void main(String[] args) throws Exception{

        //CompanyDataクラスのインスタンス化
        CompanyData companyData = new CompanyData();

        //変数の設定
        BufferedReader br = null;
        String line;
        int indexCompanyName,indexCeoName,indexEstablishmentDay;
        int startIndex,endIndex;
        String companyName,ceoName,establishmentDay;

        //リストの設定
        List <CompanyData> companyInfo = new ArrayList <CompanyData>();

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


        while((line = br.readLine()) != null) {

            //行に対象文字が存在するか
            if(line.contains(ConstantObjects.MARK_COMPANY)
                    || line.contains(ConstantObjects.MARK_CEO)
                    || line.contains(ConstantObjects.MARK_ESTABLISHMENT_DAY))
            {
            //出現位置の取得
            indexCompanyName = line.indexOf(ConstantObjects.MARK_COMPANY);
            indexCeoName = line.indexOf(ConstantObjects.MARK_CEO);
            indexEstablishmentDay = line.indexOf(ConstantObjects.MARK_ESTABLISHMENT_DAY);

            //対象文字列の取得
            startIndex = indexCompanyName + (ConstantObjects.MARK_COMPANY).length();
            endIndex = line.indexOf(" ",indexCompanyName);
            companyName = line.substring(startIndex, endIndex);


            startIndex = indexCeoName + (ConstantObjects.MARK_CEO).length();
            endIndex = line.indexOf(" ",indexCeoName);
            ceoName = line.substring(startIndex,endIndex);


            startIndex = indexEstablishmentDay + (ConstantObjects.MARK_ESTABLISHMENT_DAY).length();
            endIndex = line.indexOf(" ",indexEstablishmentDay);
            establishmentDay = line.substring(startIndex,endIndex);

            //companyName,ceoNameをセット
            companyData.setCompanyName(companyName);
            companyData.setCeoName(ceoName);

            //西暦→和暦に変換
            SimpleDateFormat sdfENG = new SimpleDateFormat("yyyy年M月d日",Locale.ENGLISH);
            Date date = sdfENG.parse(establishmentDay);
            String establishmentDayJP = new SimpleDateFormat("GGGGyyyy年M月d日",new Locale("ja","JP","JP")).format(date);

            //establishmentDayJPをセット
            companyData.setEstablishmentDay(establishmentDayJP);

            //リストへ格納
            companyInfo.add(companyData);
            }
        }

        for(CompanyData outputInfo:companyInfo) {
            outputInfo.showCompanyProfile();
        }

        br.close();
    }
}
public class CompanyData {


    private String companyName;
    private String ceoName;
    private String establishmentDay;

    //companyNameのgetter,setterを設定
    public String getCompanyName() {
        return this.companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    //ceoNameのgetter,setterを設定
    public String getCeoName() {
        return this.ceoName;
    }

    public void setCeoName(String ceoName) {
        this.ceoName = ceoName;
    }


    //establishmentDayのgetter,setterを設定
    public String getEstablishmentDay() {
        return this.establishmentDay;
    }

    public void setEstablishmentDay(String establishmentDay) {
        this.establishmentDay = establishmentDay;
    }

    //保存した値の表示メソッド
    public void showCompanyProfile() {
        System.out.println("会社名  " + getCompanyName());
        System.out.println("代表取締役" + getCeoName());
        System.out.println("設立日  " + getEstablishmentDay());
    }

}
public class ConstantObjects {

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

 試したこと

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

 終わりに

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

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

ファイルが存在しなければ「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 12: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行目にあります。

    キャンセル

  • 2018/06/13 12:27

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

    キャンセル

  • 2018/06/13 12: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)

    日付変換が上手くいってないですね。。

    キャンセル

  • 2018/06/13 12:41

    > Unparseable date: ":2012年4月1日"

    ↑データに余計な「:」がついているのがParseExceptionの原因ですね。

    キャンセル

  • 2018/06/13 13:04

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

    ただ、ここの質問とは主旨がずれるので終わりにしたいと思います。

    tkturboさん、本当にありがとうございました!

    キャンセル

  • 2018/06/13 13:10

    > 最後の行情報しか出てこない

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

    キャンセル

  • 2018/06/13 13:27

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

    キャンセル

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

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    12517questions

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

  • Eclipse

    1530questions

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