Java/Java IO 之道
System 是一个内置类的名称,其中包含用于从键盘获取输入、在屏幕上打印文本以及执行文件输入/输出 (I/0) 的方法和对象。
System.out 是我们用来打印文本的对象的名称。当您调用 print 和 println 时,您是在名为 System.out 的对象上调用它们。
有趣的是,您可以打印 System.out
逐字 System.out.println (System.out); 逐字
输出为
逐字 java.io.PrintStream@80cc0e5 逐字
像往常一样,当 Java 打印一个对象时,它会打印对象的类型(即 PrintStream)、定义该类型的包(即 java.io)以及对象的唯一标识符。在我的机器上,标识符是 80cc0e5,但如果您运行相同的代码,您可能会得到不同的结果。
还有一个名为 System.in 的对象,其类型为 BufferedInputStream。System.in 使得可以从键盘获取输入。不幸的是,它并不能轻松地从键盘获取输入。
首先,您必须使用 System.in 创建一个新的 InputStreamReader。
逐字
InputStreamReader in = new InputStreamReader ("System.in");
逐字
然后您使用 in 创建一个新的 BufferedReader
逐字
BufferedReader keyboard = new BufferedReader (in);
逐字
所有这些操作的目的是,有一个方法可以在 BufferedReader 上调用,称为 readLine,它从键盘获取输入并将其转换为 String。例如
逐字
String s = keyboard.readLine (); System.out.println (s);
逐字
从键盘读取一行并打印结果。
只有一个问题。当您调用 readLine 时,可能会出现一些错误,并且它们可能会导致 IOException。Java 中有一条规则,如果一个方法可能会导致异常,则应该说明这一点。语法如下所示
verbatim public static void main (String[] args) throws IOException
逐字
这表明 main 可能会“抛出”IOException。您可以将抛出异常视为类似于发脾气。
从文件读取输入同样愚蠢。这是一个例子
逐字
public static void main (String[] args) throws FileNotFoundException, IOException
processFile ("/usr/dict/words");
public static void processFile (String filename) throws FileNotFoundException, IOException
FileReader fileReader = new FileReader (filename); BufferedReader in = new BufferedReader (fileReader);
while (true) String s = in.readLine(); if (s == null) break; System.out.println (s);
逐字
此程序将命名文件 (/usr/dict/words) 的每一行读入一个 String,然后打印该行。同样,声明 throws FileNotFoundException、IOException 是编译器要求的。对象类型 FileReader 和 BufferedReader 是 Java 用于执行极其常见、简单的事情的极其复杂的类层次结构的一部分。除此之外,您不可能关心此程序的工作原理。