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());
}
}
}
No.2ベストアンサー
- 回答日時:
while文の実行結果がfor文の実行結果と比べて
必ず偶数行のみ出力されていませんか?
ここにgetLine()の使い方に誤りがあると思います。
getLine()は実行毎に結果を返しますよね?
「 if(a.getLine()== null){ 」の時点でaの中身を1行取得し
結果がnullか判断されています。
nullでなければ「 System.out.println(a.getLine()); 」が実行されますが
このときにはすでに2行目を出力していることになるのです。
ポイントはwhile文内で2回getLineを使わないことです。
と、ここまで偉そうなことを言っておいて解決策は
以下のようなものしか思い浮かびません・・・
以下を参考により良くして頂けると幸いです。
-------------------------------------------------
public static void main(String [] args){
DirCmd a = new DirCmd();
while(true){
//getLineの結果を保持する変数
String temp = a.getLine();
if(null == temp){
break;
}
//nullでなければ保持している内容を出力
System.out.println(temp);
}
}
回答有り難うございます。
最初の方が言っていたa.getLine()を理解していますか?というのは
こういうことだったのですね^^;
確かに実行してると、ところどころ抜けて出力されていたのでなんでだろう?
と思っていました。
理解不足でした。
本当に有り難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- UNIX・Linux 実行の仕方及び実行結果が分かりません。 2 2022/11/17 19:31
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- UNIX・Linux 空のディレクトリで dir を行ったとき 4 2023/05/05 17:54
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
eclipse実行ができない
-
Eclipse(JAVA)のデバッグで他...
-
eclipseでスタックサイズを変更...
-
split関数で区切り文字がない場合
-
JAVAにのeclipseに関する質問で...
-
javacでStackOverflowError
-
jasper.exceptionとは?
-
環境変数設定で
-
Javascriptのパーミッション
-
eclipseのjavaを実行できない
-
javaからVBAを実行する方法を教...
-
Javaで年月の取得(YYYYMM形式で)
-
「ワークスペースをビルド中」...
-
java ○○といつもどおり入力する...
-
エクセルマクロ2003から2007で
-
Javaの計算結果がおかしい
-
Javascriptの値をJava(JSP)へ渡...
-
コミット前の更新データをチェ...
-
Eclipseで実行できてコマンドプ...
-
JAVAで作ったプログラムを通常...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
split関数で区切り文字がない場合
-
JAVAにのeclipseに関する質問で...
-
Eclipse(JAVA)のデバッグで他...
-
「ワークスペースをビルド中」...
-
Javascriptの値をJava(JSP)へ渡...
-
eclipseでスタックサイズを変更...
-
コミット前の更新データをチェ...
-
Javaで年月の取得(YYYYMM形式で)
-
Eclipseで実行>Javaアプリケー...
-
eclipseのjavaを実行できない
-
jasper.exceptionとは?
-
eclipse実行ができない
-
Eclipse 実行→Javaアプリケー...
-
環境変数設定で
-
バイナリーコードと、ソースコ...
-
javaからVBAを実行する方法を教...
-
Javaについての質問です。 コン...
-
Worksheet_Changeが動かない
-
エクリプスで実行時、最新クラ...
-
Javascriptのパーミッション
おすすめ情報