※ ChatGPTを利用し、要約された質問です(原文:dirコマンドを実行して、結果を表示するJavaプログラム(プログラム)
Javaプログラムでdirコマンドを実行する方法と結果の表示
このQ&Aのポイント
Javaプログラムでdirコマンドを実行し、結果を表示する方法について解説します。for文とwhile文を使用した場合の実行結果の違いについても説明します。
試したコードでは、for文を使用する場合とwhile文を使用する場合で実行結果が異なることになります。for文では指定した回数分だけ繰り返されますが、while文では条件式がtrueの間は無限に繰り返されます。
したがって、for文の場合は指定した回数分だけ表示されますが、while文の場合は終了条件がないため、全ての行が表示されます。ループを抜けるためには、readLineメソッドがnullを返すかどうかを判定すれば良いです。
dirコマンドを実行して、結果を表示するJavaプログラム(プログラム
dirコマンドを実行して、結果を表示するJavaプログラム(プログラムは一番下に)なのですが
このプログラムをfor文でfor(int i=0;i<=13;i++)とこのように
やったら、以下のような結果になったのですが
//実行結果
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は xxxx-xxxx です
C:\Users\z\zw\zww(1) のディレクトリ
2010/10/19 11:11 <DIR> .
2010/10/19 11:11 <DIR> ..
2010/10/19 11:11 301 .classpath
2010/10/19 11:11 381 .project
2010/10/19 11:11 <DIR> .settings
2010/10/19 11:16 <DIR> bin
2010/10/19 11:16 <DIR> src
2 個のファイル 682 バイト
5 個のディレクトリ 48,884,387,840 バイトの空き領域
//実行結果ここまで
これをwhileで
while(true){
if(a.getLine()==null){
break;
}
System.out.println(a.getLine());
}
というようにやると以下のような実行結果になって、for文と同じ結果になるのが正
しい結果だと思うのですがなりませんでした。ループを抜けるために、break文をや
ったのですが、自分が考えた条件は、getLine()メソッドは読み込む行が無くなった
ら、nullを返すので、a.getLineがnullと同じになったらbreakをするという風に自
分ではしたつもりなのですが、条件が違うのかfor文のような結果が出ませんでした。
whileの場合なぜこのような結果になってしまったのかわからなく、
手詰まりになってしまったので、どなたかご教授ください
実行結果
ボリューム シリアル番号は xxxx-xxxx です
C:\Users\z\zw\zww(1) のディレクトリ
2010/10/19 11:11 <DIR> .
2010/10/19 11:11 301 .classpath
2010/10/19 11:11 <DIR> .settings
2010/10/19 11:16 <DIR> src
5 個のディレクトリ 48,886,591,488 バイトの空き領域
実行結果ここまで
//プログラム
import java.io.*;
class DirCmd{
BufferedReader br;
DirCmd(){//コンストラクタの定義(dirコマンドをここで実行)
try{
Process p = Runtime.getRuntime().exec("cmd /c dir");
InputStream is = p.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
}catch(IOException e){}
}
public String getLine(){//dirコマンドの実行結果の一行を読む
String line = null;// 読み込む行が無くなったらnullを返す
try{
line = br.readLine();
}catch(IOException e){}
return(line);
}
public static void main(String [] args){
DirCmd a = new DirCmd();
while(true){
if(a.getLine()== null){
break;
}
System.out.println(a.getLine());
}
}
}
お礼
回答有り難うございます。 最初の方が言っていたa.getLine()を理解していますか?というのは こういうことだったのですね^^; 確かに実行してると、ところどころ抜けて出力されていたのでなんでだろう? と思っていました。 理解不足でした。 本当に有り難うございました。