IO的概念:
主要是指使用JAVA进行输入输出操作,JAVA所有IO机制都是基于流进行输入输出的,这些数据代表了字符或字节数据的流动系列
数据流:
数据流是一串连续不断的数据集合,类似于管道的感觉。采用数据流的目的就是使得输出输入独立于设备。
输入流:程序从输入流读取外界数据
输出流:程序向输出流写入数据,输出到外界
数据流分类:
流序列中的数据既可以是未加工的原始二进制数据,也可以是经一定编码处理后符合某种格式规定的特定数据。
1>字节流:数据流中最小的数据单位是字节
2>字符流:数据流中最小的数据单位是字符,JAVA中的字符是Unicode编码,一个字符占两个字节
标准IO:
java.lang.System
public final class System extends Object{
static PrintStream err;//标准错误流(输出)
static InputStream in;//标准输入(键盘输入流)
static PrintStream out;//标准输出流(显示器输出流)
}
java.IO层次体系:
5个类:(File、OutputStream、InputStream、Writer、Reader)
一个接口:Serializable
1. File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。
2.InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。
3.OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。
4.Reader(文件格式操作):抽象类,基于字符的输入操作
5.Writer(文件格式操作):抽象类,基于字符的输出操作
6.RandomAccessFile(随机文件操作):它的功能丰富,可以从文件的任意位置进行读取(输入输出)操作
非流式文件类(File类):
主要用于命名文件,查询文件属性和处理文件目录
import java.io.File;
import java.io.IOException;
public class TestFile {
public static void main(String args[]) throws IOException {
File dir = new File("\\root");
File f1 = new File(dir, "fileOne.txt");
File f2 = new File(dir, "fileTwo.java");
// 文件对象创建后,指定的文件或目录不一定物理上存在
if (!dir.exists())
dir.mkdir();
if (!f1.exists())
f1.createNewFile();
if (!f2.exists())
f2.createNewFile();
System.out.println("f1's AbsolutePath= " + f1.getAbsolutePath());
System.out.println("f1 Canread=" + f1.canRead());
System.out.println("f1's len= " + f1.length());
String[] FL;
int count = 0;
FL = dir.list();
for (int i = 0; i < FL.length; i++) {
count++;
System.out.println(FL[i] + "is in \\root");
}
System.out.println("there are" + count + "file in //root");
}
}
JAVA流派生关系:
缓冲输入输出流BufferedInputStream/BufferedOutputStream:
计算机访问外部设备非常耗时,为了减少访问外存对计算机的消耗,因此除了程序和流节点间交换数据必须的读写极之外,还应该增加缓冲机制。缓冲流就是每一个数据流分配一个缓冲区,一个缓冲区就是一个临时存储数据的内存,这样可以减少访问硬盘的次数,提高传输效率。
BufferedInputStream:数据先写到缓冲区,待缓冲区写满后一次性将数据发送给输出设备
将文件读入内存:
FileInputStream in=new FileInputStream( “file1.txt ” );
BufferedInputStream bin=new BufferedInputStream( in);
BufferedOutputStream:系统从缓冲区读取数据,待缓冲区为空时,系统才从输入设备读取数据到缓冲区
将内存写入文件:
FileOutputStreamout=new FileOutputStream(“file1.txt”);
BufferedOutputStream bin=new BufferedInputStream(out);
将键盘输入流读到内存:
InputStreamReader sin=new InputStreamReader (System.in) ;
BufferedReader bin=new BufferedReader(sin);