• ベストアンサー

javaのfor文が機能してないみたいなんですが・・

javaプログラミングを始めて間もないものなんですが、for文にA~Bの文をいれるとループしなくなります。もしも、A~Bの文がなかったらループするんですが・・ A~Bの文をいれてループさせるにはどのようにすればよいのでしょうか?? String a[] = dir.list(); //dirはディレクトリ for( int i=0; i<a.length; i++ ) { File g = new File(dir,a[i]);     if( g.isDirectory() ) { System.out.println(i + ": " + a[i] + "(ディレクトリ)"); } if( g.isFile() ) { System.out.println(i + ": " + a[i] + "(ファイル)"); } File f =new File(a[i]);             //A InputStreamReader reader = new InputStreamReader (new FileInputStream (f), "jis"); BufferedReader breader = new BufferedReader (reader); OutputStreamWriter writer = new OutputStreamWriter (new FileOutputStream(t), "sjis"); BufferedWriter bwriter = new BufferedWriter(writer); int c; StringBuffer sb = new StringBuffer(); while ((c = breader.read()) != -1){ sb.append((char)c); } String mail = sb.toString(); String crlf2 = ""; int pos = mail.indexOf(crlf2) + crlf2.length(); bwriter.write (mail,pos,mail.length() -pos); bwriter.close(); breader.close();           //B }

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

  • ベストアンサー
  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.4

質問者のdirがカレントディレクトリでなければ File f =new File(a[i]); は File f =new File(dir, a[i]); ですね。質問者自身、File gに関しては、すでにそうしてます。 list()メソッドより、この場合はlistFiles()メソッドのほうが便利でしょうね。 (そしてもちろん、「ディレクトリなら何もしない」という文は、File fに関して書くべきですね。)

inokidumu
質問者

お礼

ありがとうございます! プログラムがうまく実行できました。 回答ありがとうございます!!

その他の回答 (3)

noname#119918
noname#119918
回答No.3

このプログラムは「ディレクトリdirのファイルをコピーするプログラム」という解釈でよろしいですか? そう解釈してファイルfooをfoo.copyにコピーすると仮定して修正したのが 以下のプログラムですが、このプログラムは私の環境では正しく動いています。 for文も正常にループを行い、以下の出力をします。 解釈に間違っている点などあれば補足してください。 import java.io.File; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; class loop { public static void main(String [] args) throws IOException { File dir = new File("."); // カレントディレクトリを指定 String a[] = dir.list(); for( int i=0; i<a.length; i++ ) { File g = new File(dir,a[i]); if( g.isDirectory() ) { System.out.println(i + ": " + a[i] + "(ディレクトリ)"); continue; // ディレクトリはスキップ } if( g.isFile() ) { System.out.println(i + ": " + a[i] + "(ファイル)"); } File f =new File(a[i]); // A File t = new File(a[i] + ".copy"); InputStreamReader reader = new InputStreamReader (new FileInputStream (f), "jis"); BufferedReader breader = new BufferedReader (reader); OutputStreamWriter writer = new OutputStreamWriter (new FileOutputStream(t), "sjis"); BufferedWriter bwriter = new BufferedWriter(writer); int c; StringBuffer sb = new StringBuffer(); while ((c = breader.read()) != -1){ sb.append((char)c); } String mail = sb.toString(); String crlf2 = ""; int pos = mail.indexOf(crlf2) + crlf2.length(); bwriter.write (mail,pos,mail.length() -pos); bwriter.close(); breader.close(); // B } } }

inokidumu
質問者

お礼

なるほど参考になります。 記述いただいたプログラムでうまく実行できました。 ありがとうございます!!

回答No.2

A~Bの間のどこかで、実行時エラーが出てるんじゃないですか?

inokidumu
質問者

補足

エラーは出ていません。 また、実行も出来ますがA~Bを繰り返しません。

  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.1

「ループしなくなる」とはどういう状態でしょうか? ・forループ文の中が実行されない(forループに入らない) ・forループの中が1回だけ実行され、2回目以降に行かない ・途中で例外が発生するなどして止まる(最後まで実行されない) ・最後まで実行されてるようだが、想定した結果にならない ・その他 また、 >OutputStreamWriter writer = new OutputStreamWriter (new FileOutputStream(t), "sjis"); このtとは何でしょうか?

inokidumu
質問者

補足

>「ループしなくなる」とはどういう状態でしょうか? 「forループの中が1回だけ実行され、2回目以降に行かない」です。 また、「t」はファイルです。

関連するQ&A