Java系统中,采用“流”的机制来实现输入/输出操作,流实际上是一个数据序列,它可以看成是数据的导管。这个导管只是一个逻辑上的虚拟结构,导管的两端一端是源端,另一端是目的端。数据从源端输人,从目的端输出。流的使用者不用考虑流内部数据是如何传输的,只需要向源端注人数据和从目的端提取数据即可。
流的两端都设置有一定的数据缓冲区暂存数据,这样接收端不用时时刻刻都监视流是否有数据需要接收,数据来了之后先放在缓冲区内,等需要的时候再去读取。而发送端也不必为每一个字节都调用发送方法,而是等聚集了一定数量的数据之后再一起发送,从而可以大大提高发送效率。
作为一种语言体系,java中主要按照流(stream)的模式来实现。其中数据的流向是按照计算机的方向确定的,流入计算机的数据流叫做输入流(inputStream),由计算机发出的数据流叫做输出流(outputStream)。
Java语言体系中,对数据流的主要操作都封装在java.io包中,通过java.io包中的类可以实现计算机对数据的输入、输出操作。在编写输入、输出操作代码时,需要用import语句将java.io包导入到应用程序所在的类中,才可以使用java.io中的类和接口。
InputStream 为字节输入流,它本身为一个抽象类,不能通过new的方法构造实例
inputstream类常用的成员方法及说明
(1) public abstract int :读取一个byte的数据,返回值是高位补0的int类型值。若返回值=-1说明没有读取到任何字节读取工作结束。 (2) public int read(byte b[ ]):读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的 (3) public int read(byte b[ ], int off, int len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。 (4) public int available( ):返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用, (5) public long skip(long n):忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取 (6) public int close( ) :我们在使用完后,必须对我们打开的流进行关闭.4. FileInputStream类(读)
FileInputStream可以使用read()方法一次读入一个字节,并以int类型返回。
int b;
FileInputStream f=new FileInputStream(''文件名'');
b=f.read();
for(int i=0;b!=-1;i++){
System.out.println((char)b);
b=f.read();
}
5.OutputStream类
OutputStream提供了3个write方法来做数据的输出,这个是和InputStream是相对应的。
(1) public void write(byte b[ ]):将参数b中的字节写到输出流。 (2) public void write(byte b[ ], int off, int len) :将参数b的从偏移量off开始的len个字节写到输出流。 (3) public abstract void write(int b) :先将int转换为byte类型,把低字节写入到输出流中。 (4) public void flush( ) : 将数据缓冲区中数据全部输出,并清空缓冲区。 (5) public void close( ) : 关闭输出流并释放与流相关的系统资源。6.FileOutputStream类(写)
FileOutputStream用来处理以文件作为数据输出目的数据流;或者说是从内存区读数据入文件
创建一个文件流对象有两种方法:
方式1:
File f=new File (“文件路径 ");
FileOutputStream out= new FileOutputStream (f);
方式2:
FileOutputStream out=new FileOutputStream(“文件路径 ");
方式3:构造函数将 FileDescriptor()对象作为其参数。
FileDescriptor() fd=new FileDescriptor();
FileOutputStream f2=new FileOutputStream(fd);
方式4:构造函数将文件名作为其第一参数,将布尔值作为第二参数。
FileOutputStream f=new FileOutputStream("文件路径",true);
7.缓冲输入输出流(BufferedInputStream/ BufferedOutputStream)
计算机访问外部设备非常耗时。访问外存的频率越高,造成CPU闲置的概率就越大。为了减少访问外存的次数,应该在一次对外设的访问中,读写更多的数据。为此,除了程序和流节点间交换数据必需的读写机制外,还应该增加缓冲机制。缓冲流就是每一个数据流分配一个缓冲区,一个缓冲区就是一个临时存储数据的内存。这样可以减少访问硬盘的次数,提高传输效率。
1)将文件读入内存:将BufferedInputStream与FileInputStream相接
FileInputStream in=new FileInputStream( “file1.txt ” );
BufferedInputStream bin=new BufferedInputStream( in);
2)将内存写入文件:将BufferedOutputStream与 FileOutputStream相接
FileOutputStreamout=new FileOutputStream(“file1.txt”);
BufferedOutputStream bin=new BufferedInputStream(out);
3)键盘输入流读到内存:将BufferedReader与标准的数据流相接
InputStreamReader sin=new InputStreamReader (System.in) ;
BufferedReader bin=new BufferedReader(sin);
8.文件(File类)
File 类定义了一些与平台无关的方法来操作文件,File类主要用来获取或处理与磁盘文件相关的信息,像文件名、 文件路径、访问权限和修改日期等,还可以浏览子目录层次结构。
File 类表示处理文件和文件系统的相关信息。也就是说,File 类不具有从文件读取信息和向文件写入信息的功能,它仅描述文件本身的属性
public static void main(String[] args) {
//1.File(String pathname) 将指定路径名转换成一个File对象
File file = new File("D:\1.txt");
System.out.println(file);
//2.File(String parent,String child) 根据指定的父路径和文件路径创建File对象
File file1 = new File("D:\a","1.txt");
System.out.println(file1);
//3.File(File parent,String child) 根据指定的父路径对象和文件路径创建File对象
File parent = new File("D:\a");
File file2 = new File(parent, "1.txt");
System.out.println(file2);
File file3 = new File(new File("D:\a"),"1.txt");
System.out.println(file3);
}



