栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

IO流和File

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

IO流和File

和我一起学习Java吧,加油!

文章目录
  • 前言
  • 一、File
  • 二、IO流
    • 1.Inputstream
      • 代码
    • 2.OutputStream
      • 代码
    • 3.CopyFile
      • 代码
        • 异常抛出
        • 异常捕获
        • 封装CopyFile类
  • 总结


前言

流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出。


一、File

File 文件路径的抽象表现形式

注意 : java中字符串中定义路径 的分隔符可以为 /   //  \
		 不能使用,会识别为转义字符

常用功能可查询

二、IO流

需求 : 读写文件内部的内容,File类无法实现,没有提供这样功能,所以可以通过IO实现

IO流 :
    流 : 指一连串流动的数据,以先入先出的方式发送数据,流就是管道

数据源  --->    数据   --->    目的地

流的分类 :
    按照流向分 : (以程序(人大脑)为中心)
        输入流
        输出流
    操作单元分 :
        字节流 : 万能流
        字符流 : 只能传输纯文本文件
    按照功能分 :
        节点流 : 从数据源到目的地直接传输,真实做读入写出能力
        功能流(包装流) : 从数据源经过包装再到目的地--> 增强节点流的功能,提高节点流的性能

注意 : 不同层面的流存在不同的划分,但是不冲突,都是相辅相成的
java.io 包下提供使用io相关的类型
1.Inputstream

InputStream : 此抽象类是表示输入字节流的所有类的超类。
操作不同的数据源,字节输入流提供了不同的子类
文件流
FileInputStream 文件字节输入流
字节数组(了解)
ByteArrayInputStream 字节输入数组流

文件字节输入流使用步骤 :
    1.与文件建立联系(表示文件)
    2.构建输入流
    3.读入数据
    4.处理数据
    5.关闭
代码
// 1.与文件建立联系(表示文件)
// 2.构建输入流
InputStream is = new FileInputStream("D://test.txt");
// 3.读入数据
//int read() 从此输入流中读取一个字节的数据。
int num = -1;
while((num=is.read())!=-1){
	// 4.处理数据
	System.out.println((char)num);
}
// 5.关闭
is.close();

优化

//1.构建流
InputStream is = new FileInputStream("D://test.txt");
//2.读取
int len = -1;
byte[] car = new byte[1024];
while((len = is.read(car))!=-1){
//3.处理
	System.out.println(new String(car,0,len));
}
//4.关闭
is.close();

再优化

//构建流
InputStream is = new FileInputStream("D://test.txt");
//byte[] readAllBytes() 从输入流中读取所有剩余字节。
byte[] datas = is.readAllBytes();
System.out.println(new String(datas));
//4.关闭
is.close();
2.OutputStream

字节输出流 OutputStream : 此抽象类是表示输出字节流的所有类的超类。
节点流 输出流 节点流
根据目的地选择使用哪一种具体的字节输出流的子类
文件字节输出流 FileOutputStream
字节数组输出流(了解) ByteArrayOutputStream

文件字节输出流使用步骤 :
1.构建File对象目的地
2.构建输出流
3.准备数据
4.写出
5.刷出
6.关闭
注意 :
    在使用输出流的时候,如果目的地文件不存在,系统会自动创建目的地文件,但是如果目的地文件所在路径不存在,不会创建,会抛出异常java.io.FileNotFoundException
    向文件中写出内容时候,会默认覆盖原文件内容,如果想要实现追加,在构建流的构造器中可以添加一个参数boolean append->true追加,默认false不追加覆盖
代码
//1.构建File对象目的地
//2.构建输出流
//OutputStream os = new FileOutputStream(dest);
OutputStream os = new FileOutputStream("D://hehe.txt",true);

//3.准备数据
int num = 97;
byte[] arr = "你好".getBytes();

//4.写出
//void write(byte[] b) 将指定字节数组中的 b.length字节写入此文件输出流。
//void write(byte[] b, int off, int len) 将从偏移量 off开始的指定字节数组中的 len字节写入此文件输出流。
//void write(int b) 将指定的字节写入此文件输出流。
os.write(num);
os.write(arr);
//5.刷出
os.flush();
//6.关闭
os.close();
3.CopyFile

拷贝文件 : *****
数据源文件—> 输入流—> 程序 —>输出流—> 目的地文件

步骤 :
    1.构建流
        输入流
        输出流
    2.读写数据
    3.刷出
    4.关闭(后打开的先关闭)
代码 异常抛出
// 1.构建流
InputStream is = new FileInputStream("D://test.txt");
OutputStream os = new FileOutputStream("D://AAA/test.txt",true);
// 2.读写数据
int len = -1;  //记录每次读入到字节数组中数据的个数
byte[] car = new byte[1024];
while((len = is.read(car))!=-1){
	os.write(car,0,len); //写出字节数组中读入的数据
}
// 3.刷出
os.flush();
// 4.关闭(后打开的先关闭)
os.close();
is.close();
异常捕获
// 1.构建流
InputStream is = null;
OutputStream os = null;
try {
	is = new FileInputStream("D://test.txt");
    os = new FileOutputStream("D://AAA/haha.txt",true);
    // 2.读写数据
    int len = -1;  //记录每次读入到字节数组中数据的个数
    byte[] car = new byte[1024];
    while((len = is.read(car))!=-1){
    	os.write(car,0,len); //写出字节数组中读入的数据
    }
    // 3.刷出
    os.flush();
} catch (FileNotFoundException e) {
	e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} finally {
	// 4.关闭(后打开的先关闭)
    if(os!=null){
    	try {
        	os.close();
        } catch (IOException e) {
        	e.printStackTrace();
        }
    }
    if(is!=null){
        try {
        	is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
	}
}
封装CopyFile类
public static void copyFile(String src, String dest) throws FileNotFoundException {
	copyFile(src!=null?new File(src):null,dest!=null?new File(dest):null);
}
public static void copyFile(File src, File dest) throws FileNotFoundException {
	//判断是否存在src,dest对象
    if(src==null || dest==null){
		throw new NullPointerException("数据源或目的地为null!!!");
    }
    //判断数据源文件在系统中是否真实存在,存在才能拷贝,不存在不能拷贝
    if(!src.exists()){
        throw new FileNotFoundException("数据源在系统中不存在...");
    }
    
}

总结

欢迎留言!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/895193.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号