Java 数据的输入与输出

本文最后更新于:2024年3月18日 凌晨

Java 数据的输入与输出

使用标准输入/输出流

数据的输出

  • 标准输出流(System.out)中提供如下方法实现数据的输出显示。
    • print()方法:实现不换行的数据输出。

    • println()方法:与上面方法的差别是输出数据后将换行。

    • printf()方法:带格式描述的数据输出,该方法包含两个参数,第一个参数中给出输出格式的描述,第2个参数的输出数据,其中,输出格式描述字符串中需要安排与输出数据对应的格式符。

转义字符 对应的数据类型
%c 单个字符
%d 十进制数
%f 浮点数
%e 科学计数法表示的浮点数
%n 换行符
%x 十六进制数
%s 字符串

[例2-2]:数据输出应用举例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Test{
public static void main(String a[]){
int m=12,n=517;
System.out.print("n%m="+(n%m));
System.out.println("\tn/m"+(n/m));
System.out.print(Integer.toBinaryString(m));
System.out.println("\t"+Integer.toBinaryString(m>>2));
System.out.printf("Value ofPI is %.3f%n,Math.PI");
System.out.printf("result1=%e%n",1500.34);
System.out.printf("result2=%13.8e%n",1500.34);
}
}

n%m=1 n/m=43
1100 11
Value of PI is 3.142
result1=1.500340e+03
result2=1.50034000e+03
  • 说明:第6,7行用到的Integer.toBinaryString()方法用于将一个整数转换为二进制形式的数字串,第8行的printf()方法的输出格式中%.3f表示按保留小数点后3位的形式在此位置输出数据项内容,默认按6位小数位输出,第9行的printf()方法的格式中%e表示用科学表示法,默认小数点后数据按6位输出,第10行的printf()方法中%13.8e表示小数点后按8位输出,整个数据占13位宽度,宽度值多余额前面补空格,不足按实际数据占的宽度输出。

数据的输入

字符的输入

  • 利用标准输入流的read()方法,可以从键盘读取字符,但要注意,read()方法从键盘获取的是输入的字符的字节表示形式,需要使用强制类型转换将其转换为字符型,例如:
1
char c = (char)System.in.read();// 读一个字符。

字符串的输入

  • 从标准输入流(System.in)取得数据,经过InputStreamReader转换为字符流,并经过BufferedReader进行包装后,借助BuferedReader流对象提供的readLine()方法从键盘读取一行字符。

[例2-3]:字符串类型数据输入。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.io.*;
public class InputString{
public static void main(String args[]){
String s="";
System.out.print("pkease enter a String:");
try {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
s = in.readLine();// 读一行字符。
} catch (IOException e) {}
System.out.println("You've enter a String:"+s);
}
}

please enter a String:Hello World!
You've enter a String:Hello World!

说明

  • 第9行用流对象的radLIne( )方法读数据时有可能产生IO异常(IOException)对于IO异常,JAVA编译器强制要求程序中必须对这类异常进行捕获处理,将可能产生异常的代码放在try块中,catch部分用于定义捕获哪类异常以及相关处理代码。

  • 第4行在定义变量s时给其赋初值有必要,在try块中第9行读取数据给s赋值不能保证一定成功,如果在第11行访问s时不能确定s赋过值,则编译不能通过。

程序中还常需要输入数值数据,如整数和实数,这类数据必须先通过上面的方法获取字符串,然后通过基本数据类型的包装类提供的方法将字符串转换为相应类型的数据,下面是整数和双精度数的转换方法:

Integer.parseInt(String)方法:将数字字符串转换为整数。Double.parseDouble(String)方法:将字符串形式的数字转换为双精度数。

1
2
3
4
String x = "123";
int m=Integer.parseInt(x); //m的值为123
x="123.41";
double n= Double.parseDouble(x);//n的值为123.41
  • 使用java.util.Scanner类读取数据:一个扫描器,使用分隔符分解它的输入,默认情况下用空格作为分隔符,Scanner的输入源取决于构造函数。以下从标准输入(键盘)获取数据。

常用方法:

  • boolean: hasNext():判断是否有下一个数据。
  • next() :遇见第一个有效字符(非空格,非换行符)时,开始扫描,直到遇见第一个分隔符或结束符(空格或换行符)时,结束扫描,光标还是在本行。
  • int: nextInt():读取整数,只读取数值,剩下"\n"还没有读取,所以光标还在本行中。
  • double: nextDouble():读取双精度数,只读取数值,剩下"\n"还没有读取,所以光标还在本行中。
  • String: nextLine():读取下一行字符串,扫描到一行内容当作是字符串处理,所以光标在下一行首部。
  • 注意:一般来说,next(),nextInt()不推荐和 nextLine()混合使用,因为nextLine()会读取next他们遗留下的结束符(换行)直接结束读取,如果非要使用,可以在next()/nextInt()和 nextLine()之间用一个 nextLine()过滤掉结束。
1
2
3
4
5
6
7
Scanner input = new Scanner(System.in);
String one = input.nextLine();// 读取下一行字符串。
boolean one = input.hasNext();// 判断是否有下一个数据。
int one = input.nextInt();// 读取整数。
Double one = input.nextDouble();// 读取双精度数。
System.out.println(one);
input.close();

用Swing对话框实现输入/输出

数据输入

  • 可用javax.swing.JOptionPane类的showInputDialog()方法从输入对话框获得字符串,该方法最简单的一种格式为:
1
Static void showInputDialog(Object message);
  • 其中,参数message为代表输入提示信息的对象。

数据输出

  • javax.swing.JOptionPane类的showMessageDialog()方法从输入对话框获得字符串,该方法最简单的一种格式为:
1
Static void showMessageDialog(Component parentComponent, Object message)
  • 其中,参数parentComponent代表该对话框的父窗体部件,如果存在,则对话框显示在窗体的中央,在值为null时表 示该对话框在屏幕的中央显示;参数message为显示的内容。

[例2-4]:用Swing对话框输入和显示数据。

1
2
3
4
5
6
7
import javax.swing.*;
public class Test2{
public static void main(String args[]){
String s = JOptionPane.showInputDialog("请输入你的姓名"):
JOptionPane.showMessageDialog(null,"华东交大欢迎你:"+s);
}
}