• ベストアンサー

javaで大量のファイルを読み込む方法

javaプログラミングについて質問です。 例えば、a1.txt~a100.txtの100個のテキストファイルがある として、これをループか何かを使って順番に読み込みたいのですが、 そのような方法はあるのでしょうか。 // ファイル入力ストリームを取得 BufferedReader br = new BufferedReader(new FileReader("a1.txt")); BufferedReader br2 = new BufferedReader(new FileReader("a2.txt")); BufferedReader br3 = new BufferedReader(new FileReader("a3.txt")); ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ BufferedReader br100 = new BufferedReader(new FileReader("a100.txt")); という風に書くのが面倒に思っています。 宜しくお願いします。

  • Java
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • justraver
  • ベストアンサー率30% (62/201)
回答No.3

順番を無視していいのと同じディレクトリの中なら String dirString = "C:/data"; File dir = new File(dirString); File files[] = dir.listFiles(); for (int i = 0; i < files.length; i++) {  if (!files[i].isDirectory()) {   BufferedReader br = new BufferedReader(new FileReader(files[i].getName()));   // 何かの処理   // .....  } } と、言った感じですかねぇ。

kanari501
質問者

お礼

ディレクトリ以下で取り出すこともできるんですね! 参考にさせていただきます!

その他の回答 (2)

  • Gishi
  • ベストアンサー率57% (11/19)
回答No.2

ファイル名に "a番号.txt" のような一貫性があるなら、 ファイル名を配列に入れるよりも、 下のコードのようにしたほうがよいでしょう。 for (int i = 1; i <= 100; i++) {   String name = "a" + i + ".txt";   BufferedReader br = new BufferedReader(new FileReader(name));   // ... ファイルを読み込む処理   br.close(); } (あまり賢いやり方ではないと思いますが) 100個のファイルを同時に開く必要があるなら、 #1さんの書いたように、 BufferedReader の配列を作ればいいと思います。

kanari501
質問者

お礼

この方法が知りたかったんです。ありがとうございます!

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

百個のファイルを同時に開いておく必要はありますか? あるのだったら。 String[] names = { "a1.txt", "a2.txt", ... "a100.txt" }; BufferedReader[] br = new BufferedReader[100]; for(int i=0; i<100; i++) {  br[i] = new BufferedReader(new FileReader(names[i])); } // 処理 for(int i=0; i<100; i++) {  br[i].close(); } ただはっきり言って、100もファイルを開くと重いのでお勧めしません。 一つずつで良ければ for(int i=0; i<100; i++) {  BufferedReader br = new BufferedReader(new FileReader(names[i]));  // 処理  br.close(); } これで良いでしょう。

kanari501
質問者

お礼

なるほど!参考にさせていただきます!

関連するQ&A

  • JAVA テキストの取り出し方について

    ■JAVAのテキストの取り出し方について質問がございます。 ■テキストから一番最初の文字列を取り出したいのですが、どのような 方法があるか教えていただきたく参りました。 ■テキストの名前は shokijii.texで 状態は  問題,回答番号,解説,0,文,1,文,2,文,3,文  問題,回答番号,解説,0,文,1,文,2,文,3,文  問題,回答番号,解説,0,文,1,文,2,文,3,文  となっております。 ■今のところプログラムの記述は BufferedReader br =null; br =new BufferedReader(new FileReader(shokuji.txt)); ■と定義していますが、テキストの最初の文字列を取り出すには    br =new BufferedReader(new FileReader(shokuji.txt));                         ↓                      ■ここの()内ので                      どのように記述したら                      よいでしょうか? ■また()内での定義にかからわらず、  ・できそうな方法 テキストは調整可能ですので、  ・テキストに付け加えこのように定義したら取り出せるよ といった提案、意見などもございましたら、どうかお教えください。 お願い申し上げます。  

  • テキストファイルからの読み込みエラー

    app = getServletConfig().getServletContext(); fr =new FileReader(app.getRealPath("dbsplORA.txt")); br = new BufferedReader(fr); strPar = br.readLine(); br.close(); このような感じで、テキストファイルからの読み込みを行っていますが,なぜかいつもファイルが見つかりませんといわれます. ファイル自体はちゃんと名前も全半角あっています。 エラーメッセージに出ているものをコピーして貼り付けると動作します。 今回、Noを振り分け,ループしてたくさんのファイルを読み込もうと考えていますが,これのおかげで作成できません。 すみませんが、教えてもらえないでしょうか。 そして、今,仮ループで貼り付けて動かしていますが、最後らへんのテキストを読むとMalformedInputExceptionがでます。 ちなみに、ループで読み込みという意味は strBan = "dbsql"+strBan+".txt";//strBanはカウンターされている。 という意味です。よろしくお願いします。

    • ベストアンサー
    • Java
  • ストリーム テキスト

    初心者の質問です。よろしくお願いします。 Javaのストリームを勉強しているのですが、FileReaderでテキストファイル(txt)を入力するにはどうすれば良いのでしょうか? Javaファイルは正しく入力できたのですが。 FileReader fr=new FileReader(args[0]);では、問題があるのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Java
  • unicodeファイルの読み込み

    javaアプレット上で BufferedReader file = new BufferedReader(new FileReader("C:/test/list.txt")); で外部テキストファイルを読み込んでいるのですが、この外部テキストファイルの文字コードをANSIからUnicodeに変えるとプログラムが動かなくなります。日本語やアルファベットではない文字の保存のためにテキストをUnicodeにて保存しなければならないのですが、どうすればUnicodeのテキストファイルを読み込むことができますか。

    • ベストアンサー
    • Java
  • テキストファイルから文字列を読み込み!!

     Java初心者です。よろしくお願いします。 テキストファイルから文書を読み込み、その文章の中のある単語を検索するにはどうすればよいのでしょうか? BufferedReader br = new BufferedReader(new FileReader("test1.txt")); で読み込みをさせているのですが、読み込んだ後、その文章の中の単語(文字列)を検索し、それを何かに出力したいと考えています。 どなたかアドバイスをください!!よろしくお願いします!!

  • javaでの文字列からの数字抽出

    文字列内の数字だけを取り出したいとおもっています。 たとえばファイル内からreadline()で読み込んだ文字列が [0, 0] [-0.34063, 0.0756989] [-0.362579, 0.118652] [-0.36264, 0.118637] だったならば 配列内に {0,0,-0.34063,0.0756989,-0.362579,0.118652,-0.36264,0.118637 } のように格納したいのですが可能なんでしょうか? "["や空白のようなものを削除して数字だけを取り出したいのです。 現在はこのようにファイルの文字列を取得しています FileReader fr = new FileReader(inputpath); BufferedReader br = new BufferedReader(fr); String read = br.readLine(); よろしくお願いします。

    • ベストアンサー
    • Java
  • java配列を用いたテキスト(画像)読み込みについ

    javaで配列を用いたテキスト(画像)読み込みについて。 教えて下さい。よろしくお願いします。 こんにちは。 現在、javaでプログラミング練習をしているものです。 複数のテキストファイルをランダムに表示させる、というプログラムで、 知恵袋であった、以下の質問を参考に作っています。 (これを応用して、画像のランダム表示を作りたいと考えています) http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1229836927... 自分なりに書き換えてみたりしましたが、上手く動きませんでした。 ((Unknown Source)・・・と表示されてしまいます;) 普通のテキストファイル読み込み、テキストフィールドに表示するプログラムを作りました。 これは正常に動きます。 もし以下のプログラムを活用してランダム表示ができる方法をご存知の方、 是非教えてください。 よろしくお願いします。 //テキスト読み込み try{ File file = new File("adv/testsc.txt"); if (checkBeforeReadfile(file)){ BufferedReader br = new BufferedReader(new FileReader(file)); String result = ""; String allString = ""; while((result = br.readLine()) != null){ allString += result + "\n"; } txtar1.setText(allString); String str; while((str = br.readLine()) != null){ txtar1.setText(str.toString()); } br.close(); }else{ txtar1.setText("ファイルが見つからないか開けません"); } }catch(FileNotFoundException a){ System.out.println(e); }catch(IOException a){ System.out.println(e); } どうぞよろしくお願いいたします。m(_ _)m

  • ファイルのパスの取得について

    いつも参考にさせて頂いています。 掲示板をファイル操作にて作成しようと思っています。 初歩的な質問かもしれませんが宜しくお願いします。 フォルダ構成が下記の場合、「confフォルダのtest.txt」を読み込む際のパスはどのように取得もしくは指定すれば良いでしょうか? プロジェクトフォルダ  |  |----JavaSource ←.javaファイルを格納  |----WebContent      |----css      |----js      |----WEB-INF          |----conf ←このフォルダ内のtest.txt          |----jsp          |----lib ファイルの読み込みはBufferedReaderクラスを使うと効率よく読み込めるとネットで記述があったのでそれを使おうと思ってます。 BufferedReader br = new BuffferedReader(new FileReader("test.txt") ); みたいな感じで読み取れると思ってますが合ってますでしょうか? ("test.txt"の箇所に取得した(絶対又は相対)パスが入ると思ってます。) 以上宜しくお願いします。

    • ベストアンサー
    • Java
  • jspでファイルの読み込み

    jspでwebサーバーにある“1.txt”ファイルを読み込んでそれを表示するプログラムを作成したのですが、エラーが出てしまいます。サーバーの環境(jsp実行環境等)は問題ありません。以下のコードで何かおかしなところがありましたら教えてください。 <%@ page contentType="text/html" import="java.util.*,java.io.*" %> <% String result = ""; String h_s = ""; FileReader h_fr = new FileReader("1.txt"); BufferedReader h_br = new BufferedReader(h_fr); while(true){ h_s = h_br.readLine(); if (h_s == null){ break; } result = result + h_s; } %> <%= result %>

    • ベストアンサー
    • Java
  • java ファイル操作

    現在javaでファイル操作しファイルの文字列を検索したりファイルに文字列を追加したりする ものを作成しています。 現状のコードはこのような感じです。 class addresskensaku{ public static void main(String[] args)throws IOException{ System.out.println("数字を選択\n1.名前で検索\n2.年齢で検索\n3.出身地で検索\n4.追加"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); char res = str.charAt(0); //1が選択された場合 if(res == '1' || res == '1'){ System.out.println("名前を入力してください。"); BufferedReader fn = new BufferedReader(new InputStreamReader(System.in)); String str1 = fn.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 System.out.println("検索結果 :"); while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //部分一致 if(words[0].indexOf(str1) != -1){ System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //2が入力された場合 if(res == '2' || res == '2'){ System.out.println("年齢を入力してください。"); BufferedReader o = new BufferedReader(new InputStreamReader(System.in)); String ol = o.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp =null; //検索 while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //完全一致 if (ol.equals(words[1])){ // System.out.println("検索結果:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //3が入力された場合 if(res == '3' || res == '3'){ System.out.println("出身地を入力してください。"); BufferedReader p = new BufferedReader(new InputStreamReader(System.in)); String pref = p.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //部分一致 if(words[2].indexOf(pref) != -1){ System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //4が入力された場合 追加 if(res == '4' || res == '4'){ //氏名入力 System.out.println("氏名を入力してください。"); BufferedReader n = new BufferedReader(new InputStreamReader(System.in)); String str2 = n.readLine(); //年齢入力 System.out.println("年齢を入力してください。"); BufferedReader o = new BufferedReader(new InputStreamReader(System.in)); String str3 = o.readLine(); //住所入力 System.out.println("住所を入力してください。"); BufferedReader a = new BufferedReader(new InputStreamReader(System.in)); String str4 = a.readLine(); //ファイルに書き込み try{ File file = new File("addressdata.txt"); FileWriter filewriter = new FileWriter(file, true); filewriter.write(str2+","+str3+","+str4+"\r\n"); filewriter.close(); }catch(IOException e){ System.out.println("e"); } } } } これをカプセル化し 各機能ごとにメソッドを分けて作ろうかなと思っています。 結果の出力はmainでやる予定です。

専門家に質問してみよう