标准输入流
使用StdIn库从标准输入流中获取数据,isEmpty()判断输入是否已经结束(由Ctrl-d或者Ctrl-z结束),在默认状态下系统把输出定向到终端窗口,输入的内容就是输入流。
public static void main(String[] args) {
int sum = 0;
int count = 0;
while(!StdIn.isEmpty()){
sum = sum + StdIn.readInt();
count++;
}
double ave = (double)sum/count;
StdOut.println(ave);
}
输出结果:
// Run
20 30 20 50 60 1
^D
30.166666666666668
Process finished with exit code 0
// 命令行运行
D:\Workspace\Java\First\src>java com\FirstJ\Test.java
10 20 30 40 20 30
^Z
25.0
D:\Workspace\Java\First\src>
重定向和管道
1.标准输出重定向
public static int[] RandomInt(int n, int a, int b) {
int[] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = StdRandom.uniform(a, b);//生成[a,b)的随机整数
}
return arr;//返回生成的随机数组
}
public static void main(String[] args) {
int n = StdIn.readInt(); //输入随机数组长度
int a = StdIn.readInt(); //随机数组左边界[a,b)
int b = StdIn.readInt(); //随机数组右边界[a,b)
int[] arr = RandomInt(n, a, b);
for (int i = 0; i < arr.length; i++) {
StdOut.println(arr[i]);
}
输出结果:
10 -10 10
4
-9
3
2
1
5
-6
3
7
-1
Process finished with exit code 0
在命令行状态下可以对输出进行重定向:
D:\Workspace\Java\First\src>java com\FirstJ\Write.java > data.txt
1000 -200 200
D:\Workspace\Java\First\src>
生成data.txt文件:
% java com\FirstJ\Write.java > data.txt
这条命令指明的标准输出流不是打印至终端窗口,而是被写入一个data.txt的文件中,每一个StdOut.print()或者StdOut.println()都会向文件中追加一段数据,上述程序会得到一个含有1000个范围在[-200, 200)之间的随机整数的txt文件,而终端的不会出现任何输出;
2.标准输入重定向
public static void main(String[] args) {
int sum = 0, count = 0;
int[] arr = In.readInts();
for (int i = 0; i < arr.length; i++) {
sum = sum + arr[i];
count++;
StdOut.println(arr[i]);
}
// StdIn.readInt()方法实现
// while(!StdIn.isEmpty()){
// int temp = StdIn.readInt();
// sum = sum + temp;
// count++;
// StdOut.println (temp);
// }
double re = (double)(sum) / count;
StdOut.println ("平均值为:" + re);
}
输出结果:
D:\Workspace\Java\First\src>java com\FirstJ\Read.java < data_read.txt
注: com\FirstJ\Read.java使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
6
-9
2
3
6
-3
-5
-8
6
-3
平均值为:-0.5
D:\Workspace\Java\First\src>
% java com\FirstJ\Read.java < data_read.txt
这条命令指明了程序的输入由data.txt文件中读取一系列的数值,而不是等待用户的输入;
3.管道
% java com\FirstJ\Write.java | java com\FirstJ\Read.java
把write.java的标准输出和Read.java标准输入指向同一个流,可以突破处理的输入输出流的长度限制。
代码见上
输出结果:
D:\Workspace\Java\First\src>java com\FirstJ\Write.java | java com\FirstJ\Read.java
10 -10 10
-9
-8
5
-3
-7
8
2
-1
3
3
-0.7
D:\Workspace\Java\First\src>