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?");在这里,使用nextLine方法是因为在输入行中有可能包含空格.要想读取一个单词(以空白符为分隔符),就调用
String name = in.nextLine();
String firstName = in.next();要想读取一个整数,就调用nextInt方法
System.out.print("how old are you?");与此类似,要想读取下一个浮点数,就调用nextDouble方法.
int age = in.nextInt();
最后,在程序的最开始添加上一行:
import java.util.*;Scanner类定义在java.util包中.当使用的类不是定义在基本java.lang包中时,一定要使用import指示字符将相应的包加载进来.
InputTest.java如下所示:
import java.util.*;java.util.Scanner的方法有如下:
/**
* 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));
}
}
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注释:当采用命令行方式启动一个程序时,可以利用重定向将任意文件捆绑到System.in和System.out:
{
Scanner in = new Scanner(Paths.get("myfile.txt");
}
java MyProg < myfile.txt > output.txt这样,就不必担心处理FileNotFoundException异常了.
java.util.Scanner的相关方法如下:
Scanner(File f);构造一个从给定文件读取数据的Scanner
Scanner(String data)构造一个从给定字符串读取数据的Scanner
PrintWriter(String fileName)构造一个将数据写入文件的PrintWriter.文件名由参数指定