アプリ版:「スタンプのみでお礼する」機能のリリースについて

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
}

A 回答 (4件)

質問者のdirがカレントディレクトリでなければ


File f =new File(a[i]);

File f =new File(dir, a[i]);
ですね。質問者自身、File gに関しては、すでにそうしてます。

list()メソッドより、この場合はlistFiles()メソッドのほうが便利でしょうね。

(そしてもちろん、「ディレクトリなら何もしない」という文は、File fに関して書くべきですね。)
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/01/15 00:05

このプログラムは「ディレクトリ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
}
}
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/01/15 00:02

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

この回答への補足

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

補足日時:2008/01/14 22:05
    • good
    • 0

「ループしなくなる」とはどういう状態でしょうか?


・forループ文の中が実行されない(forループに入らない)
・forループの中が1回だけ実行され、2回目以降に行かない
・途中で例外が発生するなどして止まる(最後まで実行されない)
・最後まで実行されてるようだが、想定した結果にならない
・その他

また、
>OutputStreamWriter writer = new OutputStreamWriter (new FileOutputStream(t), "sjis");
このtとは何でしょうか?

この回答への補足

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

補足日時:2008/01/14 22:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!