ファイルに記載している内容をそのまま(改行もそのまま認識して)javaの中に読み込みたいのですが可能でしょうか?

javaまったくの初心者のためまったくわかりません。
分かる方、お願い致します。

長くなるので詳細はコメントに書きます。

回答の条件
  • 1人5回まで
  • 登録:2010/02/04 12:58:39
  • 終了:2010/02/06 23:26:28

ベストアンサー

id:kn1967 No.3

kn1967回答回数2915ベストアンサー獲得回数3012010/02/05 22:18:45

ポイント500pt

以下、一例。

(パターンa)

data.txtファイルの例

title=株式会社○○○ 10月度メールマガジン
naiyo<<<end
今月の特集は紅葉の名所特集です。
今年は○○市では11月中旬が見ごろになるでしょう。
そこで、○○市の紅葉スポットを調査してきました!!

○○公園
○○○川周辺
end

※ <<<end は end で始まる行まで連続で読み続けろという意味で使ってます。

本文内容にあわせてend以外の文字列に変えてもプログラム側の変更はありません。

import java.io.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

class textSplitReader2 {
    public static void main(String[] args) throws IOException {
        BufferedReader br1 = new BufferedReader(new FileReader("data.txt")); // ファイルストリーム準備
        Pattern ps1 = Pattern.compile("^title\\s*=(.+)\\s*"); // テキスト検索パターン生成
        Pattern ps2 = Pattern.compile("^naiyo\\s*<<<\\s*(.+)\\s*"); // テキスト検索パターン生成
        String mailTitle = ""; // ファイル読み込み用
        String mailBody = ""; // ファイル読み込み用
        String mailBodyEndMark = ""; // 終端文字格納用(<<<end ならendが入る)
        String rs; // ファイル読み込み用
        while ((rs = br1.readLine()) != null) {
            Matcher m1 = ps1.matcher((String)rs); // titleパターンを当ててみる
            if(m1.find()) { // パターンにマッチした場合の処理
                mailTitle = (String)m1.group(1); // パターンから抽出
            } else {
                Matcher m2 = ps2.matcher((String)rs); // 本文の開始位置かどうかパターン当てててみる
                if(m2.find()) { // パターンにマッチした場合の処理
                    mailBodyEndMark = (String)m2.group(1); // パターンから抽出
                    while ((rs = br1.readLine()) != null) {
                        if (rs.startsWith(mailBodyEndMark)) { // mailBodyEndMark で書き始められていたらループを抜ける。
                            break;
                        }
                        mailBody += rs;
                    }
                }
            }
        }
        // 以下、テスト出力
        System.out.print("----title----" + System.getProperty("line.separator"));
        System.out.print(mailTitle + System.getProperty("line.separator"));
        System.out.print("----body----" + System.getProperty("line.separator"));
        System.out.print(mailBody);
        System.out.print("----end----" + System.getProperty("line.separator"));
    }
}

(b)一行目がタイトルで、以降が本文の場合

data.txtファイルの例

株式会社○○○ 10月度メールマガジン
今月の特集は紅葉の名所特集です。
今年は○○市では11月中旬が見ごろになるでしょう。
そこで、○○市の紅葉スポットを調査してきました!!

○○公園
○○○川周辺
import java.io.*;
class textSplitReader3 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("data.txt")); // ファイルストリーム準備
        String mailTitle = br.readLine(); // タイトル読み込み
        String mailBody = ""; // 本文準備
        String rs; // ファイル読み込み用
        while ((rs = br.readLine()) != null) { // 本文読み込み
            mailBody += rs; // 追記
        }
        // 以下、テスト出力
        System.out.print("----title----" + System.getProperty("line.separator"));
        System.out.print(mailTitle + System.getProperty("line.separator"));
        System.out.print("----body----" + System.getProperty("line.separator"));
        System.out.print(mailBody);
        System.out.print("----end----" + System.getProperty("line.separator"));
    }
}
id:Ryo0524

すごく参考になりました。

おかげで完成しました。

2010/02/06 23:25:29

その他の回答(2件)

id:km1967 No.1

km1967回答回数541ベストアンサー獲得回数402010/02/04 15:55:29

FileInputStreamを使えばできます。

下記参照

http://www.tohoho-web.com/java/file.htm

id:aside No.2

aside回答回数339ベストアンサー獲得回数312010/02/05 16:10:03

読み込み用の簡単なクラスです

import java.io.*;
public class data {
	public static void main(String[] args){
		String naiyo;
		try{
			FileReader file = new FileReader("C:/data.txt");
			BufferedReader br = new BufferedReader(file);
			while((naiyo = br.readLine()) != null ){
				System.out.println(naiyo);
			}
			br.close();
			file.close();
		} catch (IOException e) {
			System.out.println(e);
		}
	}
}
id:kn1967 No.3

kn1967回答回数2915ベストアンサー獲得回数3012010/02/05 22:18:45ここでベストアンサー

ポイント500pt

以下、一例。

(パターンa)

data.txtファイルの例

title=株式会社○○○ 10月度メールマガジン
naiyo<<<end
今月の特集は紅葉の名所特集です。
今年は○○市では11月中旬が見ごろになるでしょう。
そこで、○○市の紅葉スポットを調査してきました!!

○○公園
○○○川周辺
end

※ <<<end は end で始まる行まで連続で読み続けろという意味で使ってます。

本文内容にあわせてend以外の文字列に変えてもプログラム側の変更はありません。

import java.io.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

class textSplitReader2 {
    public static void main(String[] args) throws IOException {
        BufferedReader br1 = new BufferedReader(new FileReader("data.txt")); // ファイルストリーム準備
        Pattern ps1 = Pattern.compile("^title\\s*=(.+)\\s*"); // テキスト検索パターン生成
        Pattern ps2 = Pattern.compile("^naiyo\\s*<<<\\s*(.+)\\s*"); // テキスト検索パターン生成
        String mailTitle = ""; // ファイル読み込み用
        String mailBody = ""; // ファイル読み込み用
        String mailBodyEndMark = ""; // 終端文字格納用(<<<end ならendが入る)
        String rs; // ファイル読み込み用
        while ((rs = br1.readLine()) != null) {
            Matcher m1 = ps1.matcher((String)rs); // titleパターンを当ててみる
            if(m1.find()) { // パターンにマッチした場合の処理
                mailTitle = (String)m1.group(1); // パターンから抽出
            } else {
                Matcher m2 = ps2.matcher((String)rs); // 本文の開始位置かどうかパターン当てててみる
                if(m2.find()) { // パターンにマッチした場合の処理
                    mailBodyEndMark = (String)m2.group(1); // パターンから抽出
                    while ((rs = br1.readLine()) != null) {
                        if (rs.startsWith(mailBodyEndMark)) { // mailBodyEndMark で書き始められていたらループを抜ける。
                            break;
                        }
                        mailBody += rs;
                    }
                }
            }
        }
        // 以下、テスト出力
        System.out.print("----title----" + System.getProperty("line.separator"));
        System.out.print(mailTitle + System.getProperty("line.separator"));
        System.out.print("----body----" + System.getProperty("line.separator"));
        System.out.print(mailBody);
        System.out.print("----end----" + System.getProperty("line.separator"));
    }
}

(b)一行目がタイトルで、以降が本文の場合

data.txtファイルの例

株式会社○○○ 10月度メールマガジン
今月の特集は紅葉の名所特集です。
今年は○○市では11月中旬が見ごろになるでしょう。
そこで、○○市の紅葉スポットを調査してきました!!

○○公園
○○○川周辺
import java.io.*;
class textSplitReader3 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("data.txt")); // ファイルストリーム準備
        String mailTitle = br.readLine(); // タイトル読み込み
        String mailBody = ""; // 本文準備
        String rs; // ファイル読み込み用
        while ((rs = br.readLine()) != null) { // 本文読み込み
            mailBody += rs; // 追記
        }
        // 以下、テスト出力
        System.out.print("----title----" + System.getProperty("line.separator"));
        System.out.print(mailTitle + System.getProperty("line.separator"));
        System.out.print("----body----" + System.getProperty("line.separator"));
        System.out.print(mailBody);
        System.out.print("----end----" + System.getProperty("line.separator"));
    }
}
id:Ryo0524

すごく参考になりました。

おかげで完成しました。

2010/02/06 23:25:29
  • id:Ryo0524
    <詳細>
    "title="で記載されている内容と"naiyo="で記載されている内容をわけて読み込みたい。
    ※"naiyo="の部分はstartとendの間のみを読み込む(start、endはあってもなくてもよい
    のですが、naiyo部分がどこからどこまでなのか分かりやすいかと思ってつけています)。

    例)
    date.txt(もしくはdate.properties??)の内容
    ---------------------------------------------------------------------------
    title=株式会社○○○ 10月度メールマガジン
    naiyo=start
    今月の特集は紅葉の名所特集です。
    今年は○○市では11月中旬が見ごろになるでしょう。
    そこで、○○市の紅葉スポットを調査してきました!!

    ○○公園
    ○○○川周辺
    end
    ---------------------------------------------------------------------------

    上のtitleの内容をjavaファイルのtitleの部分に、naiyoの内容をjavaファイルのnaiyo
    の部分に読み込みたいです。

    javaファイル(一部抜粋)
    ---------------------------------------------------------------------------
    String mailTitle = title
    StringBuffer mailBody = naiyo
    ---------------------------------------------------------------------------
    ※すみません…。naiyoの方ですが、型が何かもわからないのでStringBufferにしてます…。。


    <補足?>
    ※date.txtについてですが、もしかして以下のように内容だけをファイルにしたほうが
    読み込みやすいのでしょうか?
    date.txt
    ---------------------------------------------------------------------------
    今月の特集は紅葉の名所特集です。
    今年は○○市では11月中旬が見ごろになるでしょう。
    そこで、○○市の紅葉スポットを調査してきました!!

    ○○公園
    ○○○川周辺
    ---------------------------------------------------------------------------

    title.properties
    ---------------------------------------------------------------------------
    title=株式会社○○○ 10月度メールマガジン
    ---------------------------------------------------------------------------

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません