文本输入输出流–Scanner和PrintWriter–输入和输出针对Java虚拟机而言

PrintWriter输出流

  1. 使用PrintWriter可以创建一个文本文件,并且向文本文件写入数据
  2. 使用PrintWriter后,必须使用关闭输出流,可以手动也可以自动关闭,不关闭会导致数据不能正确的保存在文件中

手动关闭

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class WriteData {
public static void main(String[] args) throws FileNotFoundException {

File file = new File("H:/wored.txt");
if(file.exists())
{
System.out.println("文件已经存在,操作不成功");
System.exit(1);
}
PrintWriter pw = new PrintWriter(file); //这里会自动创建一个新的文件
pw.write("FREE Code");
pw.print("Jo hnTsMI TL");
pw.close(); //必须调用该方法,如果没有调用,则不能正确保存在文件中
Scanner in = new Scanner(file);
System.out.println(in.nextLine());
}
}

使用try-with-resources自动关闭输出流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class WriteDataWithAutoClose {
/**
* 文件输出流PrintWriter注意事项
* @param args
* @throws FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException {
File file = new File("H:/wored.txt");

if(file.exists())
{
System.out.println("File already exits");
System.exit(0);
}

try(
PrintWriter pw = new PrintWriter(file);
//这里的pw只会当作AutoCloseable的子类型,在try语句块有效,因此会自动关闭所创建的文件输出流,并不需要我们手动关闭
){
pw.print("John T Smith");
pw.print(90);
pw.print("Eric K Jones");
pw.println("Evet");
pw.print("85");
}
Scanner in = new Scanner(file);
System.out.println(in.nextLine());
}
}

Scanner输入流

使用java.util.Scanner 类来从控制台或者文本读取数据到虚拟机

从键盘读取

1
2
	
Scanner input1 = new Scanner(System.in);

从文件中读取

1
2
	
Scanner input = new Scanner(new File("H:/wored.txt"));

例子1:

1
2
3
4
5
6
7
8
9
public class ReadData {
public static void main(String[] args) throws FileNotFoundException {
Scanner input = new Scanner(new File("H:/wored.txt")); //从文件中读取数据
String str = null;
while(input.hasNext())
str = input.nextLine();
System.out.println(str);
input.close(); //当然这里自动关闭也是可以的
}

Scanner 如何工作

  1. Scanner中的next(),nextInt(),nextDouble()等方法都是标记读取方法,默认标记符为空格,读取以分隔符分开的标记,当然分隔符也可以使用useDelimiter(String regex)方法进行设置
  2. Scanner中的next(),nextInt(),nextDouble()首先都会跳过任意分隔符,知道下一次遇到分隔符,才会读取结束

例子2:

1
2
3
4
5
6
7
8
9
public class ReadData {

public static void main(String[] args) {
Scanner input = new Scanner("54 33");
int sum = input.nextInt() + input.nextInt();
System.out.println(sum);
}
//结果为87
}

例子3:

1
2
3
4
5
6
7
8
9
10
11
12
public class ReadData {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);

//从键盘中输入数据34 换行 567
int intValue = input.nextInt();
String line = input.nextLine();
System.out.println(intValue);
System.out.println(line);
}
//结果只有34,因为line读取到换行符,因为在换行符之前为空,返回为空
}