質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

10080閲覧

コマンドライン引数でファイルの読み込みやファイル名の書き方が分かりません・・・

nakagen

総合スコア24

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2020/07/28 08:58

コマンドライン引数のプログラムを作成したいのですが、やり方が分からずエラーになってしまいます。

理想の実行結果として、
test1.txtの「☆☆☆☆☆」とtest2.txtの「★★★★★」を画面に交互に出現させる

☆☆☆☆☆
★★★★★
☆☆☆☆☆
★★★★★
☆☆☆☆☆
★★★★★

が理想ですが、どうしてもtest1.txtの文しか表示されません・・・(実行の構成で、test1.txtだけを指定したのが悪かったのか・・・)

具体的には、ファイルの名前をコマンドライン因数にする方法と2つ以上のファイルをコンソールに表示する方法がわかりません。

以下の写真については、一枚目はコマンドライン引数の基となるプログラム
2枚目は、test2.txtのファイル
3枚目は、test1.txtのファイル
です。

イメージ説明

イメージ説明

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momon-ga

2020/07/28 10:18

コマンドライン引数は何を設定する想定ですか? また、引数の数は1個で固定ですか?(args.length != 1 だと、処理中止になっている)
nakagen

2020/07/28 10:25

test1.txtとtest2.txtを入れたいのでおそらく2つだろうと思いますが… コマンドライン引数は、ファイルの数を想定したいのですが…(すみません、初心者で解釈が間違っているかもしれません…)
momon-ga

2020/07/28 10:32

解釈はあっていると思います。 > 実行の構成で、test1.txtだけを指定したのが悪かったのか・・・) と、ありますが、実際には、test1.txt test2.txt を指定するという認識で合ってます? で、上記で実行しようとすると処理が中止されますけど、そこは修正するっていうことですかね?
nakagen

2020/07/28 10:41

実際に、実行の構成のプログラムの引数で、「test1.txt test2.txt」と打ったら弾かれました…。そこで、「test1.txt」だけを入力したら★★★★★が3回繰り返されてだけでしたので、test1.txtとtest2.txtを同時に入力できるようにしたいです…
nakagen

2020/07/28 10:43

また、その方法を行ったときは、ドキュメント形式のtest1.txtとtest2.txtから入力しました
guest

回答2

0

ベストアンサー

if (args.length != 1) {if (args.length != 2) { に変更しましたか?

あとは、args[0] と args[1] について同じことを繰り返すだけです。

Java

1 BufferedReader br; 2 String str; 3 for (int i = 0; i < 3; i++) { 4 br = new BufferedReader(new FileReader(args[0])); 5 while ((str = br.readLine()) != null) 6 System.out.println(str); 7 br.close(); 8 9 br = new BufferedReader(new FileReader(args[1])); 10 while ((str = br.readLine()) != null) 11 System.out.println(str); 12 br.close(); 13 }

上手く行ったかどうかではなく、このコードが理解できたかどうかを
コメントに書いてください。

追記

下のargs[0]が、データの個数で、上のargsが指定したデータの個数まで保持できるという箱のようなものでしょうか?

args は、引数(argument) の文字列(String) の配列です。

次のコードで引数の個数を変えていろいろ試してみてください。

Java

1class Test { 2 public static void main(String[] args) { 3 System.out.println("args.length = " + args.length); 4 for (int i = 0; i < args.length; i++) 5 System.out.println("args[" + i + "] = " + args[i]); 6 } 7}

実行例

Plain

1$ java Test abcde 1234567 XYZ 2args.length = 3 3args[0] = abcde 4args[1] = 12345667 5args[2] = XYZ

「java args」でググってみませんでしたか?

投稿2020/07/28 23:45

編集2020/07/29 10:52
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakagen

2020/07/29 09:06

ありがとうございます!下のargs[0]が、データの個数で、上のargsが指定したデータの個数まで保持できるという箱のようなものでしょうか?
guest

0

受け取ったコマンドライン引数は、スペース毎に区切られて、順番にargs配列の中に入っています。

2つのファイルの中身を表示したい場合は、2つ目のファイルも開いて同じように表示して下さい。

投稿2020/07/28 09:25

amiya

総合スコア1218

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakagen

2020/07/28 09:41

確認なのですが、「2つ目のファイルを開いて同じように表現する」とはどういう意味でしょうか…?理解力が足りず、すみません、、、
amiya

2020/07/28 09:47

既に一つ目のファイルは開いて中身を表示することができているのですよね? それと同じ事を2つ目のファイルにも行うだけです。 読み込むファイル名を変えれば同じ処理で読み込むファイルが変わります。
nakagen

2020/07/28 09:53

本当にすみません…、試行錯誤した際に、ドキュメントで作成したファイルが読み込まれていたようで、質問の項目に載せたclasskadai21.javaとclasskadai21のファイルは読み込めていませんでした、、、
nakagen

2020/07/28 09:54

改めて、下の2つのファイルを読み込みこみたいのですが、可能でしょうか…?
amiya

2020/07/28 10:18

コマンドライン引数は、args配列に入っていますので、 args[0]で一つ目のファイル名が、args[1]で二つ目のファイル名が得られます。 (正確にはファイル名ではなく、あくまでコマンドラインで指定したパラメータですが) あとは、そのファイル名のファイルを開くことでその中を読むことができるようになります。 BufferedReaderのインスタンスを複数つくることで、複数のファイルを開いて、複数のファイルにアクセスすることも可能です。
nakagen

2020/07/28 10:31

ファイル名って、「test1.txt」と「test2.txt」のままで大丈夫なのでしょうか…?入出力エラーが出てしまって、正しく入力されているのかが分かりません…
nakagen

2020/07/28 10:34

args[0]をargs[1]にしてみたのですが、 次のようなエラーが生じてしまいました… Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at kadai.kadai212.main(kadai212.java:18)
amiya

2020/07/28 10:52

きちんと、コマンドラインでファイル名を指定していますか? args.lengthで、受け取れたコマンドライン引数の数を知ることができます。 for(int i=0; i<args.length; i++) System.out.println(i+":"+args[i]); で、受け取ったコマンドライン引数を見る事ができます。
nakagen

2020/07/28 12:23

確認したところ、テキストファイルだと、test1.txtは受け取ることが出来ましたが、test2.txtは受け取れていませんでした…
amiya

2020/07/28 12:55

コマンドラインの入力が正しいかを確認してください。 プログラム名に続けて、第一パラメータ 第二パラメータ という風にスペースで区切って入力します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問