内容
1.流的图示
2.十六个需要掌握的流
3.Input和Output的继承结构图
4.Reader和Writer的继承结构图
5.FileInputStream
一.流的图示
二.十六个需要掌握的流
三.Input和Output的继承结构图
四.Reader和Writer的继承结构图
五.FileInputStream
1.read()
(1)注意点
①如果要设置成文件,必须把后缀名去掉。
②read()是从此输入流中读取一个数据字节
(2)使用示例
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;
public class 测试程序 {
public static void main(String[] args) {
FileInputStream fis = null;
try {
//1.保存文件路径(绝对/相对)
//String filePath = "temp01";//相对路径
//String filePath = "D:\\All Java projects Eclipse\\对象\\src\\对象\\temp01";
String filePath = "D:/All Java projects Eclipse/对象/src/对象/temp01";
//2.要读取某文件,首先要与这个文件创建一个“输入流”
fis = new FileInputStream(filePath);
//3.开始读
int i1 = fis.read();//以字节的方式读取
int i2 = fis.read();
System.out.println(i1);//因为文件中第一个是a,所以输出97
System.out.println(i2);//因为是b,所以输出98.
//如果已经读取到文件的最后,没东西了,就输出-1
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}finally {
//为了保证流一定会释放,所以在finally语句块中执行
if(fis != null) {
try {
fis.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
}
(3)以循环的方式读取
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;
public class 测试程序 {
public static void main(String[] args) throws IOException {
//1.创建流
FileInputStream fis = new FileInputStream("D:\\All Java projects Eclipse\\对象\\src\\对象\\temp01");
//2.开始读
/*
while(true) {
int temp = fis.read();
if(temp == -1) break;
System.out.println(temp);
}*/
//升级循环
int temp = 0;
while((temp = fis.read()) != -1) {
System.out.println(temp);
}
//3.关闭
fis.close();
}
}
以上程序存在缺点:频繁访问磁盘,伤害磁盘,并且效率低
2.int read(byte[] bytes);
(1)注意点:
①返回的值是读到的数据个数
②读取之前在内存中准备一个byte数组,每次读取多个字节,储存到byte数组中。这个效率更高一点
(2)使用示例
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;
public class 测试程序 {
public static void main(String[] args) throws IOException {
//1.创建输入流
FileInputStream fis = new FileInputStream("D:\\All Java projects Eclipse\\对象\\src\\对象\\temp01");
//2.准备一个byte数组
byte[] bytes = new byte[3];//每一次最多读取三个字节
//3.开始读
int i1 = fis.read(bytes);
//将byte数组转换成字符串
System.out.println(new String(bytes));
int i2 = fis.read(bytes);
System.out.println(new String(bytes));
int i3 = fis.read(bytes);
System.out.println(new String(bytes));
int i4 = fis.read(bytes);
System.out.println(new String(bytes));
int i5 = fis.read(bytes);
//4.输出
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
System.out.println(i5);
//5.关闭
fis.close();
}
}
(3)使用循环读取
package 对象;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;
public class 测试程序 {
public static void main(String[] args) throws IOException {
//1.创建输入流
FileInputStream fis = new FileInputStream("D:\\All Java projects Eclipse\\对象\\src\\对象\\temp01");
//2.准备一个byte数组
byte[] bytes = new byte[1024];//每一次读取1kb
//3.用循环读取
/*while(true) {
int temp = fis.read(bytes);
if(temp == -1) break;
//将byte数组中有效的数据转换成字符串
System.out.println(new String(bytes,0,temp));//每次读取temp个
}*/
//升级循环
int temp = 0;
while((temp = fis.read(bytes)) != -1) {
System.out.print(new String(bytes,0,temp));
}
//4.关闭
fis.close();
}
}
3. available()和skip()
(1)功能介绍
int available()
功能:返回流中剩余的估计字节数
skip()
功能:跳过几个字节
(2)使用示例
package 对象;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;
public class 测试程序 {
public static void main(String[] args) throws IOException {
//1.创建流
FileInputStream fis = new FileInputStream("D:\\All Java projects Eclipse\\对象\\src\\对象\\temp01");
//2.还剩多少估计字节
System.out.println(fis.available());
//3.读取一个字节
System.out.println(fis.read());
//4.再看一下
System.out.println(fis.available());
//5。跳过两个字节
fis.skip(2);
//6.输出下一个
System.out.println(fis.read());
//7.关闭
fis.close();
/*
* 输出结果
* 11
97
10
100
*/
}
}