-1

まず第一に、私は入力と出力について何も知らなかったので、これを尋ねるつもりはありません。PrintWriter、FileInputStream、InputStreamReader、IOException に関するチュートリアルをたくさん見てきました。これらのクラスの概念を理解しています。しかし、私はこのコードを理解していません。実行してみました。まず、「two lines:」という出力がありました。最初の行に「こんにちは」と入力し、2 行目に「私はボブです」と入力しました。Enter キーを押すと、プログラムは私が書いたものを正確に出力します。コンソールに表示されるサンプルは次のとおりです。

two lines:
hello
I am Bob
hello
I am Bob

この後もプログラムは実行され続けます。誰かが私にコードを説明してもらえますか? このコードには、 System.getProperty ("line.separator")のようないくつかの新しいものがあります。このメソッドの目的は何ですか? while ループと for ループは何をしますか? fout.flush()がコメントアウトされているのはなぜですか? それをコードに含めるとどうなりますか? 私はとても混乱しています。コードは次のとおりです。

import java.io.*;
    // File, PrintWriter, FileInputStream, InputStreamReader, IOException
class Demo
{
  public static void main (String[] args)
  {

    PrintWriter out = new PrintWriter (System.out, true);
    InputStreamReader in = new InputStreamReader (System.in);
    File file = new File ("file.txt");

    try (
     PrintWriter fout = new PrintWriter (file);
     InputStreamReader fin = new InputStreamReader (new FileInputStream (file)))
    {
      out.println ("two lines:");
      String line1 = readLine (in);
      String line2 = readLine (in);
      out.println (line1);
      out.println (line2);
      out.println ();

      fout.println (line1);
      fout.println (line2);
      //fout.flush (); 
      line1 = readLine (fin);
      line2 = readLine (fin);
      out.println (line1);
      out.println (line2);
    }
    catch (IOException e)
    {
      e.printStackTrace ();
    }
  }
  public static String readLine (InputStreamReader in) throws IOException
  {
    String sepChars = System.getProperty ("line.separator");
    int countChars = sepChars.length ();
    StringBuilder sb = new StringBuilder ();
    char c = (char) in.read ();
    while (!sepChars.contains ("" + c))
    {
     sb.append (c);
     c = (char) in.read ();
    }

    for (int i = 0; i < countChars - 1; i++)
    c = (char) in.read ();
    String rad = sb.toString ();
    return rad;
  }

}
4

1 に答える 1