- ベストアンサー
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 }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
質問者のdirがカレントディレクトリでなければ File f =new File(a[i]); は File f =new File(dir, a[i]); ですね。質問者自身、File gに関しては、すでにそうしてます。 list()メソッドより、この場合はlistFiles()メソッドのほうが便利でしょうね。 (そしてもちろん、「ディレクトリなら何もしない」という文は、File fに関して書くべきですね。)
その他の回答 (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 } } }
お礼
なるほど参考になります。 記述いただいたプログラムでうまく実行できました。 ありがとうございます!!
- linux-Java
- ベストアンサー率33% (2/6)
A~Bの間のどこかで、実行時エラーが出てるんじゃないですか?
補足
エラーは出ていません。 また、実行も出来ますがA~Bを繰り返しません。
- neko_noko
- ベストアンサー率45% (146/319)
「ループしなくなる」とはどういう状態でしょうか? ・forループ文の中が実行されない(forループに入らない) ・forループの中が1回だけ実行され、2回目以降に行かない ・途中で例外が発生するなどして止まる(最後まで実行されない) ・最後まで実行されてるようだが、想定した結果にならない ・その他 また、 >OutputStreamWriter writer = new OutputStreamWriter (new FileOutputStream(t), "sjis"); このtとは何でしょうか?
補足
>「ループしなくなる」とはどういう状態でしょうか? 「forループの中が1回だけ実行され、2回目以降に行かない」です。 また、「t」はファイルです。
お礼
ありがとうございます! プログラムがうまく実行できました。 回答ありがとうございます!!