キーボードから受け取った文字列を表示したく、このコードがJava入門の本の中にあったので使おうと思っています。
ですが、このコードの具体的な動きや働きの説明が書いていなく、Scanner(System.in)やnextLine()をインターネットで調べてもはっきりとは理解できず、ただ「キーボードから受け取った文字列をScanner(System.in)で読み込み、nextLine()で受け取って、inputに入れている」ということしかわかりませんでした。
どなた詳しい働きを教えていただけないでしょうか?
また、本では、ファイルを閉じるという作業をしていなかったのですが、このコードの場合はファイルを閉じるという作業はしなくてもいいのでしょうか?
String input = new java.util.Scanner(System.in).nextLine();
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
ベストアンサー
System.inは標準入力を指しますが、これはプロセスの親子関係に関わってきます。
windowsではcmd.exeが親プロセスとして、classファイルを実行します。
(linux等でも同じような仕組みのはずです)
プロセス
dos
1java ClassName
このように実行しますが、javaコマンドの実態はPathを通したjava.exeです。
cmd.exe→java.exe
と、cmd.exeの子プロセスとして起動します。
ClassName.classはjava.exeを動かす命令ファイルに近いので、プロセスではないです。
標準入力
標準入力とは親プロセスから子プロセスへのデータの受け渡しを指します。
System.inを利用すると、java.exeがcmd.exeに入力要求をだして、それを受けたcmd.exeがキーボード入力を待つわけです。
cmd.exeのコマンド構文を変えれば、標準入力先をファイルに指定することもできます。
親プロセスをcmd.exe以外にする
javaのプログラムでこういうのがあります。
java
1String[] cmd = {"java.exe", "ClassName2"}; 2Process p = Runtime.getRuntime().exec(cmd); 3OutputStream out = p.getOutputStream();
このようにすると、外部プロセスを起動します。
getOutputStream()で出力先を取得していますが、この先につながっているのはClassName2クラスで利用するSystem.inになるわけです。
つまり、System.inにはコンソールに限らず親プロセスからの入力を待つ為のオブジェクトが入っているわけです。
キーボードで入力を直接要求してくるのはコンソールです。
一般的なレベルではここまで気にしないので[System.in=キーボード入力/コンソールからの入力]という考え方が浸透しているんでしょう。
自分も、仕組みを詳しくと聞かれなければそう答えると思います。
投稿2016/07/05 06:45
総合スコア868
0
System.inというのは、標準入力という説明が多くあると思いますが、これはUnix(Linux, FreeBSD等)の文化がちょっとわかっていないと理解しにくいかも知れません。
UnixのテキストベースのUIの時代のプログラムには、標準入出力という考え方があって、以下のように
3つの種類があり、それぞれJavaのSystemクラスのフィールドで処理が行えます。
・標準入力 System.in
・標準出力 System.out
・標準エラー System.err
キーボード入力ではなく、標準入力といっているのは、なぜかというとキーボードと決まっているわけではないからです。
何も設定しないと標準入力はキーボード、出力とエラーはコンソール(画面)に紐付けられていますが、これは任意に変更が可能です。
変更するためにはUnixコマンドの考え方のリダイレクトとかパイプとかを理解しないといけないので省略しますが、どのようなコンピュータも基本には文字のやり取りがありコンソールからの入力はキーボードがほとんどなので、省略したような説明が多いのでしょう。
ここまでが分かれば、その入力を基にScannerやらで処理をおこなっているということが多分わかると思います。
(わかるといいなw)
投稿2016/07/05 03:26
総合スコア2208
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/05 06:36

0
System.in というのは標準入力です。閉じなくて大丈夫です。
標準入力については、腐るほど解説が見つかると思うので、検索してみてください。
コンソールアプリを作られていますか?
コンソールでのキー入力を受け取る時にこういう書き方をします。
投稿2016/07/05 03:11
総合スコア28673
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/05 07:00
2016/07/15 00:35