1.有两种类型的文件,文本的和二进制的。文本文件的本质是存储在磁盘上的字符。可以使用文本编辑器进行处理的文件称为文本文件,其他的称为二进制文件,不能使用文本编辑器来读取二进制文件,二进制文件被设计为使用程序来读取。
2.java源程序存储在文本文件中,可以使用文本编辑器读取,它是文本文件。而java类文件是二进制文件,由Java虚拟机读取,二进制I/O不涉及编码和解码,因此更加高效。计算机并不区分文本文件和二进制文件,所有的文件在计算机中都是以二进制文件存储的。任何机器上的java程序都可以读取Java程序锁创建的二进制文件。Java文件可以在任何具有Java虚拟机的机器上运行。
3.Print: 将信息显示在命令窗口中,输出光标定位在最后一个字符之后;
Println:将信息显示在命令窗口中,输出光标换行定位在下一行开头
Printf: 将信息进行格式化显示在命令窗口中,输出光标定位在最后一个字符之后,其来自C语言,产生格式化输出的函数(来自stdio.h中);
printf中的f代表格式,暗示着方法将以某种格式来打印。语法为:
System.out.printf(format,item1,item2.....itemk);
这里的format是一个由子串和格式限定符构成的字符串。
例:System.out.printf("count is %d and amount is %f",count,amount);
4.Scanner类读取文本数据,Printwriter类写文本数据。
5.使用Scanner读取文本数据。
从键盘读取:Scanner input=new Scanner( System.in);
从文件读取:Scanner input=new Scanner(new File(filename));
利用java.io.File类来创建file文件的一个实例,然后使用new Scanner(File)为文件创建一个Scanner。如下:
java.io.File file = new java.io.File("score.txt");
Scanner input=new Scanner(file);
int score=input.nextInt();
方法next()和nextLine()都会读取一个字符串。next()方法读取一个由分隔符分隔的字符串。nextLine()读取一个以换行符结束的行。
6.使用PrintWriter写文本数据
向一个文本文件写入数据,需要先创建一个PrintWriter对象。
PrintWriter output=new PrintWriter(filename);
例:java.io.File file=new java.io.File("score.txt");
java.io.PrintWriter output=new java.io.PrintWriter(file);
output.print("hello");
output.println("hello");
7.二进制I/O类中的所有方法都声明为抛出java.io.IOException或java.io.IOException的子类。
8.input从文件或控制台输入到程序。
output从程序输出到文件或控制台。
9.FileInputStream类和FileOutputStream类用于从/向文件读取/写入字节。它们所有的方法都是从InputStream和OutputStream类继承的。例:
import java.io.*;
//从程序输出,向文件写入
FileOutputStream output=new FileOutputStream("temp.dat");
output.write(123);
//从文件读取,向程序输入
FileInputStream input=new FileInputStream("temp.dat");
int value;
while((value=input.read())!=-1)
System.out.print(value+" ");
10.如果试图为一个不存在的文件创建FileInputStream对象,将会发生java.io.FileNotFoundException异常。
11.catch(EOFException ex){
System.out.println("读取完毕");
}
从文件读取结束时会抛出异常,表示文件中对象读取完毕。
12.DataInputStream从数据流读取字节,并且将它们转换为合适的基本类型值或字符串,它继承自FilterInputStream类,并实现DataInput接口。
DataOutputStream将基本类型的值或字符串转换为字节,并且将字节输出到流。
例:DataOutputStream output=new DataOutputStream(new FileOutputStream("temp.dat"));
output.writeDouble(23.5);
DataInputStream input=new DataInputStream(new FileInputStream("temp.dat"));
System.out.println(input.readDouble());
13.BufferedInputStream类和BufferedOutputStream类可以通过减少磁盘读写次数来提高输入和输出的速度。
使用BufferedInputStream时,磁盘上的整块数据一次性读入内存的缓冲区中,然后将缓冲区中将单个数据传递到程序中。
使用BufferedOutputStream时,单个数据首先写入内存的缓冲区,当缓冲区已满的时候,缓冲区的数据一次性写入磁盘中。
DataOutputStream output=new DataOutputStream(new BufferedOutputStream(new FileOutputStream("temp.dat")));
DataInputStream input=new DataInputStream(new BufferedInputStream(new FileInputStream("temp.dat")));