现在首先,我不会问这是我对输入和输出一无所知。我看过很多关于 PrintWriter、FileInputStream、InputStreamReader 和 IOException 的教程。我理解这些类的概念。但我就是不明白这段代码。我试着运行它。首先,有一个输出说“两行:”。我在第一行输入“hello”,在第二行输入“I am Bob”。当我按下回车键时,程序只会输出我写的内容。这是控制台上出现的示例:
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;
}
}