【发布时间】:2015-01-13 17:40:12
【问题描述】:
首先,我不会问这是因为我对输入和输出一无所知。我看过很多关于 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;
}
}
【问题讨论】:
-
并回答您的问题。使用 f10 和 f11 单步执行代码,在您认为导致问题的点放置断点并观察变量。我的猜测是变量
c的 readLine -
正如@WhyCry 提到的,只需添加断点并按照代码查看它在做什么。至于
System.getProperty("line.separator"),这只是获取文件中用于换行的系统字符序列。您可以在System Properties 页面查看更多信息
标签: java ioexception fileinputstream printwriter inputstreamreader