跳转到内容

Java/Java IO 之道

来自 Wikibooks,开放世界中的开放书籍

Java 中的输入和输出

[编辑 | 编辑源代码]

系统对象

[编辑 | 编辑源代码]

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 用于执行极其常见、简单的事情的极其复杂的类层次结构的一部分。除此之外,您不可能关心此程序的工作原理。

华夏公益教科书