java之IO流

1.File类

1.1File类概述和构造方法【应用】

File类介绍
它是文件和目录路径名的抽象表示
文件和目录是可以通过File封装成对象的
对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已.它可以是存在的,也可以是不存在的.将来是要通过具体的操作把这个路径的内容转换为具体存在的

构造方法:
在这里插入图片描述

1.2绝对路径和相对路径【理解】

绝对路径
是一个完整的路径,从盘符开始
相对路径
是一个简化的路径,相对当前项目下的路径

1.3File类创建功能【应用】

方法分类:
在这里插入图片描述

1.4File类删除功能【应用】

方法:
在这里插入图片描述

1.5File类判断和获取功能【应用】

判断功能:
在这里插入图片描述
获取功能:
在这里插入图片描述

2.字节流

2.1 IO流概述和分类【理解】

  • IO流介绍
    IO:输入/输出(Input/Output)
    流:是一种抽象概念,是对数据传输的总称.也就是说数据在设备间的传输称为流,流的本质是数据传输
    IO流就是用来处理设备间数据传输问题的.常见的应用: 文件复制; 文件上传; 文件下载;

  • IO流的分类

    • 按照数据的流向
      输入流:读数据
      输出流:写数据
    • 按照数据类型来分
      • 字节流
        字节输入流
        字节输出流
      • 字符流
        字符输入流
        字符输出流
  • IO流的使用场景
    如果操作的是纯文本文件,优先使用字符流
    如果操作的是图片、视频、音频等二进制文件,优先使用字节流
    如果不确定文件类型,优先使用字节流.字节流是万能的流

2.2字节流写数据【应用】

  • 字节流抽象基类
    InputStream:这个抽象类是表示字节输入流的所有类的超类
    OutputStream:这个抽象类是表示字节输出流的所有类的超类
  • 子类名特点:子类名称都是以其父类名作为子类名的后缀
    字节输出流
    FileOutputStream(String name):创建文件输出流以指定的名称写入文件
  • 使用字节输出流写数据的步骤
    • 创建字节输出流对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)
    • 调用字节输出流对象的写数据方法
      释放资源(关闭此文件输出流并释放与此流相关联的任何系统资源)

2.3字节流写数据的三种方式【应用】

写数据的方法分类:
在这里插入图片描述

2.4字节流写数据的两个小问题【应用】

  • 字节流写数据如何实现换行
    windows:\r\n
    linux:\n
    mac:\r
  • 字节流写数据如何实现追加写入
    public FileOutputStream(String name,boolean append)
    创建文件输出流以指定的名称写入文件。如果第二个参数为true ,则字节将写入文件的末尾而不是开头

2.5字节流复制文件【应用】

  • 案例需求
    把“E:\itcast\窗里窗外.txt”复制到模块目录下的“窗里窗外.txt” (文件可以是任意文件)
  • 实现步骤
    复制文本文件,其实就把文本文件的内容从一个文件中读取出来(数据源),然后写入到另一个文件中(目的地)
    • 数据源:
      E:\itcast\窗里窗外.txt — 读数据 — InputStream — FileInputStream
    • 目的地:
      myByteStream\窗里窗外.txt — 写数据 — OutputStream — FileOutputStream
  • 代码实现
				public class CopyTxtDemo {
				public static void main(String[] args) throws IOException {
				//根据数据源创建字节输入流对象
				FileInputStream fis = new FileInputStream("E:\\itcast\\窗里窗				外.txt");
				//根据目的地创建字节输出流对象
				FileOutputStream fos = new 	     FileOutputStream("myByteStream\\窗里窗外.txt");
				//读写数据,复制文本文件(一次读取一个字节,一次写入一个字节)
				int by;
				while ((by=fis.read())!=‐1) {
				fos.write(by);
				}
				//释放资源
				fos.close();
				fis.close();
				}
				}

2.6字节流复制文件【应用】

  • 案例需求
    把“E:\itcast\mn.jpg”复制到模块目录下的“mn.jpg” (文件可以是任意文件去)
  • 实现步骤
    根据数据源创建字节输入流对象
    根据目的地创建字节输出流对象
    读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)
    释放资源
  • 代码实现
public class CopyJpgDemo {
public static void main(String[] args) throws IOException {
//根据数据源创建字节输入流对象
FileInputStream fis = new FileInputStream("E:\\itcast\\mn.jpg");
//根据目的地创建字节输出流对象
FileOutputStream fos = new FileOutputStream("myByteStream\\mn.jpg");
//读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)
byte[] bys = new byte[1024];
int len;
while ((len=fis.read(bys))!=‐1) {
fos.write(bys,0,len);
}
//释放资源
fos.close();
fis.close();
}
}

2.7字节缓冲流复制视频【应用】

  • 案例需求
    把“E:\itcast\字节流复制图片.avi”复制到模块目录下的“字节流复制图片.avi”
  • 实现步骤
    根据数据源创建字节输入流对象
    根据目的地创建字节输出流对象
    读写数据,复制视频
    释放资源
    代码实现

public class CopyAviDemo {
public static void main(String[] args) throws IOException {
//复制视频
// method1();
method2();
}
//字节缓冲流一次读写一个字节数组
public static void method2() throws IOException {
BufferedInputStream bis = new BufferedInputStream(new
FileInputStream("E:\\itcast\\字节流复制图片.avi"));
BufferedOutputStream bos = new BufferedOutputStream(new
FileOutputStream("myByteStream\\字节流复制图片.avi"));
byte[] bys = new byte[1024];
int len;
while ((len=bis.read(bys))!=‐1) {
bos.write(bys,0,len);
}
bos.close();
bis.close();
}
//字节缓冲流一次读写一个字节
public static void method1() throws IOException {
BufferedInputStream bis = new BufferedInputStream(new
FileInputStream("E:\\itcast\\字节流复制图片.avi"));
BufferedOutputStream bos = new BufferedOutputStream(new
FileOutputStream("myByteStream\\字节流复制图片.avi"));
int by;
while ((by=bis.read())!=‐1) {
bos.write(by);
}
bos.close();
bis.close();
}}

3.字符流

3.1为什么会出现字符流【理解】

  • 字符流的介绍
    由于字节流操作中文不是特别的方便,所以Java就提供字符流
    字符流 = 字节流 + 编码表
  • 中文的字节存储方式
    用字节流复制文本文件时,文本文件也会有中文,但是没有问题,原因是最终底层操作会自动进行字节拼接
    成中文,如何识别是中文的呢?
    汉字在存储的时候,无论选择哪种编码存储,第一个字节都是负数

3.2编码表【理解】

  • 什么是字符集
    是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等
    l计算机要准确的存储和识别各种字符集符号,就需要进行字符编码,一套字符集必然至少有一套字符编码。
    常见字符集有ASCII字符集、GBXXX字符集、Unicode字符集等
  • 常见的字符集
    • ASCII字符集:
      lASCII:是基于拉丁字母的一套电脑编码系统,用于显示现代英语,主要包括控制字符(回车键、退格、
      换行键等)和可显示字符(英文大小写字符、阿拉伯数字和西文符号)
      基本的ASCII字符集,使用7位表示一个字符,共128字符。ASCII的扩展字符集使用8位表示一个字符,共
      256字符,方便支持欧洲常用字符。是一个系统支持的所有字符的集合,包括各国家文字、标点符号、
      图形符号、数字等
    • GBXXX字符集:
      GBK:最常用的中文码表。是在GB2312标准基础上的扩展规范,使用了双字节编码方案,共收录了
      21003个汉字,完全兼容GB2312标准,同时支持繁体汉字以及日韩汉字等
    • Unicode字符集:
      UTF-8编码:可以用来表示Unicode标准中任意字符,它是电子邮件、网页及其他存储或传送文字的应用
      中,优先采用的编码。互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码。它使用
      一至四个字节为每个字符编码
  • 编码规则:
    128个US-ASCII字符,只需一个字节编码
    拉丁文等字符,需要二个字节编码
    大部分常用字(含中文),使用三个字节编码
    其他极少使用的Unicode辅助字符,使用四字节编码

3.3字符串中的编码解码问题

相关方法:
在这里插入图片描述

3.4字符流写数据【应用】

  • 介绍:
    Writer: 用于写入字符流的抽象父类
    FileWriter: 用于写入字符流的常用子类
  • 构造方法:
    在这里插入图片描述
  • 成员方法
    在这里插入图片描述
  • 刷新和关闭方法
    在这里插入图片描述

3.5字符流读数据【应用】

  • 介绍
    Reader: 用于读取字符流的抽象父类
    FileReader: 用于读取字符流的常用子类
    在这里插入图片描述

3.6字符缓冲流特有功能【应用】

在这里插入图片描述
代码演示

public class BufferedStreamDemo02 {
public static void main(String[] args) throws IOException {
//创建字符缓冲输出流
BufferedWriter bw = new BufferedWriter(new
FileWriter("myCharStream\\bw.txt"));
//写数据
for (int i = 0; i < 10; i++) {
bw.write("hello" + i);
//bw.write("\r\n");
bw.newLine();
bw.flush();
}
//释放资源
bw.close();
//创建字符缓冲输入流
BufferedReader br = new BufferedReader(new
FileReader("myCharStream\\bw.txt"));
String line;
while ((line=br.readLine())!=null) {
System.out.println(line);
}
br.close();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值