一、流的基本概念
数据流:一组有序的,有起点和终点的字节集合
1.输入流(InputStream)用于将程序中需要的数据从键盘或文件读入
2.输出流(outputStream) 用于将程序中产生的数据写入到文件中
3.缓冲流:就是为数据流配的一个缓冲区域,即专门用于传输数据的一块内存区域。
注意:(1)数据只能从头到尾顺序的读写一次
(2)流只能单方向流动
二、字节流
注意 :InputStream和outputStream是不能实例化的,平常我们所使用的都是他们的子类
(1)InputStream抽象类–此抽象类是表示字节输入流的所有类的超类/抽象类。
(2)FileInputStream子类–直接插在文件上,直接读取文件数据。
java 中对文件读取的操作:
(1)创建文件输入输出流对象
(2)打开文件
(3)用文件读写方法读写数据
(4)关闭数据流
1.创建文件字节流对象并打开文件
(1)创建FileInputStream对象,打开读取数据的文件
FileInputStream(File file)
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream(String pathname)
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
eg:
FileInputStream rf= new FileInputStream("D:\\forjava");
(2)创建FileoutputStream对象,打开读取数据的文件
FileoutputStream(File file)
FileoutputStream(String pathname)
2.读写文件–利用继承的read()和write() 方法对打开的文件进行读写
(1) read()方法读取文件
public int read() throws IoException
返回文件中读取的一个字节
public int read(byte[] b]) throws IOException
public int read(byte[] b] int start, int len) throws IOException
读取数据到字节数组b 中 ,start表示数组中的起始位置, len 是读取的最大长度
(2)write()方法写入文件
public int write(int b) throws IOException
写入一个字节b
public int write(byte[] b]) throws IOException
public int write(byte[] b] int start, int len) throws IOException
写入数据到字节数组b 中 ,start表示数组中的起始位置, len 是读取的最大长度
注:输入流结束时,返回-1
3.关闭数据流
当读写操作完毕,关闭输入输出流,释放相关的系统资源
public void close() throws IOException
eg:将磁盘文件1复制到磁盘文件2
package io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test2 {
public static void main(String[] args) {
try {
//创建输入流文件,打开源文件
FileInputStream rf = new FileInputStream("E:\\dat");
//创建输出流文件,打开目标文件
FileOutputStream wf= new FileOutputStream("E:\\dat2");
byte b[] = new byte[512];
//从源文件 0开始最多读取512个字节到数组b 中
while((rf.read(b,0,512)) != -1 );
wf.write(b);//写入目标文件
rf.close();//关闭输入文件
wf.close();//关闭输出文件
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("创建输入流文件失败");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("读写出错");
}
}
}
注意: 如果打开的文件没有找到,抛出FileNotFoundException;
如果读取的数据为空,抛出 NullPointerException