流是在设备和设备之间的一种数据传输,像水流一样,必须有源端和目的端,数据有两种传输方向,实现数据从外部源到程序的流称为输入流,实现数据从程序到外部源的流称为输出流。
Java中流的分类有两种:
按数据的传输方向分为:输入流和输出流
(输入流: 读取文件 (e:\\a.txt):从硬盘上文件读取出来后输出这个文件的内容 )
(输出流: 写文件:将e:\\a.txt 内容读出来--->写到f盘下)
(InputStream字节输入流)(OutputStream字节输出流)
(Reader字符输入流)(Writer字符输出流)
按数据传输的单位分为:字节流和字符流
需求:在当项目下输出一个文件,fos.txt文件(文本文件)
只要文本文件,优先采用字符流,字符流在字节流之后出现的
使用字节流进行操作
无法创建字节输出流对象:OutputSteam :抽象类,不能实例化
又学习过File类,并且当前是对文件进行操作,子类:FileOutputSteam进行实例化
File+InputStream
File+OutputStream
FileXXX (FileReader)
FileXXX (FileWriter)
开发步骤:
1)创建字节输出流对象(//创建对象做了几件事情 1)构造了输出流对象 (系统创建对象)2)指向了当前项目下输出fos.txt
例句:FileOutputStream fos = new FileOutputStream("fos.txt") ; //FileNotFoundException)
2)写数据(使用流对象给文件中写入数据fos.write("hello".getBytes());)
3)关闭资源(将文件和流对象不建立关系了 (fos对象不指向fos.txt)并且及时释放掉流对象所占用的内存空间)
关于字节输出流写数据的方法
FileOutputStream fos = new FileOutputStream("fos2.txt") ;//构造一个字节数出流对象
(1) public void write(int b):一次写一个字节
例句:fos.write(97);//写数据一次一个字节
fos.write(127);
例句:byte[] bys = {97,98,99,100,101} ;
fos.write(bys);
(3) public void write(byte[] b, int off,int len):一次写一部分字节数组
例句:fos.write(bys, 0, 2);
public FileOutputStream(File file, boolean append):指定为true,末尾追加数据
读数据方式:
(1)public abstract int read():一次读取一个字节
例句:
//创建一个字节文件输入流对象
//方式1:一次读取一个字节
FileInputStream fis = new FileInputStream("fis.txt") ;
//FileInputStream fis = new FileInputStream("FileOutputStreamDemo.java") ;
int by = fis.read() ; //开始读取:第一次读取
System.out.println(by);
System.out.println((char)by);
(2)public int read(byte[] b):一次读取一个字节数组 (读取实际的字节数)
while((by=fis.read())!=-1) {
System.out.print((char)by);}