一、File 类
二、流 字节流 、字符流
三、缓存类
IO 流用来处理设备之间的数据传输
java程序中,对数据的输入/输出操作以流(stream)的方式进行
java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入
输出数据。
输入输出时一个相对的概念
input读取外部数据 (磁盘,光盘等存储设备的数据)到程序(内存)中。
output 将程序中的数据输出到磁盘上/光盘上等设备中。
理解方法:将自己看成程序,流向你的就是输入,流出去的输出。
流的分类
操作数据的基本单位不同分为:字节流(8bit),字符流(16bit)
按照流的角色不同分为:节点流(直接处理文件[file]),处理流(包装节点流作用---->加速节点流)
(抽象基类) | 字节流(视频、图片、【二进制流】) | 字符流(文本文件) |
输入流(节点流) | inputStream | Reader |
输出流(节点流) | OutputStream | Writer |
抽象基类不能造对象,只能通过子类实现
1.Java的IO流共40多个类,都是4个抽象基类派生出来的
2.派生出来的子类名称都是以其父类名作为子类名的后缀
/**
* 流向:io
* 单位分:字节流、字符流
* 角色分:节点流【文件流】(直接作用于文件)、处理流
*/
public class TestStream {
//一桶一桶的读取节点(文件流)
@Test
public void testFileInputStream1() throws Exception
{
// 1.创建File类的对象
// 要读取的文件一定存在
File file = new File("hello.txt");
// 2.创建一个FileInputStram类对象
FileInputStream fis = new FileInputStream(file);
// 3.调用FileInputStream的方法,实现file文件的读取
// read 读取文件的字节(bit),当执行到文件结尾时,打印-1
int b = fis.read();
while (b != -1)
{
System.out.print((char) b);
b = fis.read();
}
// 4.关闭相应的流
fis.close(); // 如果直接将异常抛出去,后面的代码没执行,流没关一直在占用着内存
}
//一车一车读取文件流
@Test
public void testFileInputStream3()
{
FileInputStream fis = null;
try {
File file = new File("hello.txt");
fis = new FileInputStream(file);
byte[] b = new byte[20]; //
int len;
while ((len = fis.read(b)) != -1)
{
for (int i = 0; i < len; i++)
{
System.out.print((char)b[i]);
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if (fis != null)
{
try
{
fis.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
}