3.7 输入输出
打印输出到"标准输出流"(即控制台窗口),只需调用System.out.println即可.然而,读取"标准输入流"System.in就没有那么简单了. 要想通过控制台进行输入, 首先需要构造一个Scanner对象,并与"标准输入流"System.in关联.Scanner in = new Scanner(System.in);
现在,就可以
使用Scanner类的各种方法实现输入操作了.例如,nextLine方法将输入一行.
System.out.print("what is your name?");
String name = in.nextLine();
在这里,使用nextLine方法是因为在输入行中有可能包含空格.要想读取一个单词(以空白符为分隔符),就调用
String firstName = in.next();
要想读取一个整数,就调用nextInt方法
System.out.print("how old are you?");
int age = in.nextInt();
与此类似,要想读取下一个浮点数,就调用nextDouble方法.
最后,在程序的最开始添加上一行:
import java.util.*;
Scanner类定义在java.util包中.当使用的类不是定义在基本java.lang包中时,一定要使用import指示字符将相应的包加载进来.
InputTest.java如下所示:
import java.util.*;
/**
* This program demonstrates console input
*/
public class InputTest
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
// get first input
System.out.print("what is your name?");
String name = in.nextLine();
// get second input
System.out.print("how old are you?");
int age = in.nextInt();
// display output on console
System.out.println("hello, " + name + ", Next year,you'll be " + (age + 1));
}
}
java.util.Scanner的方法有如下:
Scanner(InputStream in);
用给定的输入流创建一个Scanner对象
String nextLine()
读取输入的下一行内容
String next()
读取输入的下一个单词(以空格作为分隔符)
int nextInt()
double nextDouble()
读取并转换下一个表示整数或浮点数的字符序列
boolean hasNext()
检测输入中是否还有其他单词
boolean hasNextInt()
boolean hasNextDouble()
检测是否还有表示整数或浮点数的下一个字符序列
3.7.2 格式化输出
可以使用System.out.print(x)将数值x输出到控制台上,这条命令将以x对应的数据类型所允许的最大非0数字位数打印输出x,例如:double x = 1000.0 / 3.0;
System.out.print(x);
打印
333.33333333335
Java沿用了C语言库函数中的printf方法,例如调用
System.out.printf("%8.2f", x);
就可以用8个字符的宽度和小数点后两个字符的精度打印x.
在printf中,可以使用多个参数,例如:
System.out.printf("hello, %s, next year, you'll be %d", name, age);
每一个以%字符开始的格式说明符都用相应的参数替换.
另外,还可以给出控制格式化输出的各种标志.例如,逗号标志增加了分组的分隔符.
可以使用静态的String.format方法创建一个格式化的字符串,而不打印输出:
String message = String.format("hello, %s, Next year, you'll be %d"
3.7.3 文件输入与输出
要想对文件进行读取,就需要一个用File对象构造一个Scanner对象,如下所示:Scanner in = new Scanner(Path.get("myfile.txt"));
如果文件名中包含反斜杠符号,就要记住在每个反斜杠之前再加上一个额外的反斜杠:"c:\\mydirctory\\myfile.txt".
要想写入文件,就需要构造一个PrintWriter对象.在构造器中,只需要提供文件名:
PrintWriter out = new PrintWriter("myfile.txt");
如果文件名不存在,创建该文件.
注释:如果在命令行方式下用下列命令启动程序:
java MyProg
启动路径就是命令解释器的当前路径.
如果已经知道有可能出现"找不到文件"的异常,就应该告知编译器.需要在main方法中使用throws子句标记,如下所示:
public static void main(String[] args) throw FileNotFoundException
{
Scanner in = new Scanner(Paths.get("myfile.txt");
}
注释:当采用命令行方式启动一个程序时,可以利用重定向将任意文件捆绑到System.in和System.out:
java MyProg < myfile.txt > output.txt
这样,就不必担心处理FileNotFoundException异常了.
java.util.Scanner的相关方法如下:
Scanner(File f);
构造一个从给定文件读取数据的Scanner
Scanner(String data)
构造一个从给定字符串读取数据的Scanner
PrintWriter(String fileName)
构造一个将数据写入文件的PrintWriter.文件名由参数指定