Day37 IO流的操作

Day37 IO流的操作

文章目录

  • Day37 IO流的操作
    • Java的文件拷贝
    • 利用 文件字节输出流 向文件写入数据
    • 利用 文件字节输入流 读取文件里的数据
    • 利用 带缓冲区的字节输出流 向文件写入数据
    • 利用 带有缓冲区的字节输入流 读取文件里的数据
    • 利用 字符输出转换流 向文件写入数据
    • 利用 字符输入转换流 读取文件里的数据

Java的文件拷贝

1、概念: 在Java中,可以使用IO流来实现文件的拷贝操作。一种常见的方式是使用FileInputStreamFileOutputStream来逐字节读取和写入文件内容。

2、思路:读取源文件,写入目标文件

3、示例:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Copy {
	public static void main(String[] args){
		
		//注意:小括号里创建的流会在try...catch后自动关闭
		try(FileInputStream fis = new FileInputStream("小雷.mp4");
				FileOutputStream fos = new FileOutputStream("copy.mp4");) {
			
			byte[] bs = new byte[1024];
			int len;
			while((len = fis.read(bs)) != -1){
				fos.write(bs, 0, len);
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

利用 文件字节输出流 向文件写入数据

1、思路:

  1. 准备要写入文件的数据和文件路径。
  2. 创建一个 FileOutputStream 对象,指定要写入的文件路径。
  3. 将要写入的数据转换为字节数组。
  4. 使用 FileOutputStream 对象的 write 方法将字节数组写入文件。
  5. 关闭 FileOutputStream 对象,确保数据被写入文件并释放资源。
  6. 在必要的情况下处理可能出现的 IOException 异常。

2、注意情况:

    1. 不处理异常
    1. 当文件存在时
    1. 当文件不存在时

​ 经验:所有的输出流,当文件不存在时都会创建该文件

    1. 在文件末尾追加内容

​ 经验:在文件末尾追加考虑基础流的构造方法

    1. 处理异常

3、示例:

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test03 {
	public static void main(String[] args) {
		
		
		FileOutputStream fos = null;
		try {
			//1.创建流对象 + 设置在文件末尾追加
			fos = new FileOutputStream("io.txt",true);
			
			//2.写入数据
			fos.write("123abc".getBytes());//写入byte数组
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			
			//3.关闭资源
			if(fos != null){
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}	
	}
}

利用 文件字节输入流 读取文件里的数据

1、思路:

  1. 准备要读取的文件路径。
  2. 创建一个 FileInputStream 对象,指定要读取的文件路径。
  3. 创建一个字节数组来存储读取的数据。
  4. 使用 FileInputStream 对象的 read 方法读取文件中的数据到字节数组中。
  5. 关闭 FileInputStream 对象,确保文件资源被释放。
  6. 将字节数组中的数据转换为字符串或进行其他处理。

2、注意情况:

  •  1) 不处理异常
    
  •  2) 文件存在
    
    1. 文件不存在

    经验:所有文件输入流,在文件不存在的情况下都会报错 – FileNotFoundException

  •  4) 处理异常
    

3、示例:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Test07 {
	public static void main(String[] args){
		
		
		FileInputStream fis = null;
		try {
			//1.创建流对象
			fis = new FileInputStream("io.txt");
			
			//2.读取数据
			//read(bs):读取bs长度的数据,并把数据放入数组,返回读取到的有效字节数,如果读取到文件末尾则返回-1
			byte[] bs = new byte[1024];
			int len;
			while((len = fis.read(bs)) != -1){
				System.out.println(new String(bs, 0, len));
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			//3.关闭资源
			if(fis != null){
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
	}
}

利用 带缓冲区的字节输出流 向文件写入数据

1、思路:

  1. 准备要写入文件的数据和文件路径。
  2. 创建一个 FileOutputStream 对象,用于向文件写入数据。
  3. 将 FileOutputStream 对象包装在一个 BufferedOutputStream 对象中,以提高写入性能。
  4. 将要写入的数据转换为字节数组。
  5. 使用 BufferedOutputStream 对象的 write 方法将字节数组写入缓冲区。
  6. 在适当的时机,调用 BufferedOutputStream 对象的 flush 方法将缓冲区中的数据刷新到文件中。
  7. 关闭 BufferedOutputStream 对象,确保数据被写入文件并释放资源。
  8. 在必要的情况下处理可能出现的 IOException 异常。

2、注意情况:

  • 1)不处理异常的方式

  • 2)文件存在的情况

  • 3)文件不存在的情况

    ​ 经验:所有的输出流,文件不存在的情况都会创建文件

  • 4)在文件末尾追加内容

    ​ 经验:在文件末尾追加考虑基础流的构造方法

  • 5)处理异常的方式

3、示例:

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test03 {
	public static void main(String[] args){
		
		
		BufferedOutputStream bos = null;
		try {
			//1.创建流对象
			bos = new BufferedOutputStream(new FileOutputStream("io.txt",true));
			//2.写入数据
			bos.write("123abc".getBytes());
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			//3.关闭资源
			if(bos != null){
				try {
					bos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

利用 带有缓冲区的字节输入流 读取文件里的数据

1、思路:

  1. 准备要读取的文件路径。
  2. 创建一个 FileInputStream 对象,用于从文件读取数据。
  3. 将 FileInputStream 对象包装在一个 BufferedInputStream 对象中,以提高读取性能。
  4. 创建一个字节数组或 ByteBuffer 来存储读取的数据。
  5. 使用 BufferedInputStream 对象的 read 方法从文件中读取数据到缓冲区中。
  6. 在适当的时机,处理从缓冲区中读取的数据,例如转换为字符串或进行其他处理。
  7. 关闭 BufferedInputStream 对象,确保文件资源被释放。
  8. 在必要的情况下处理可能出现的 IOException 异常

2、注意情况:

  •  1) 不处理异常
    
  •  2) 文件存在
    
    1. 文件不存在

    ​ 经验:所有输入流,当文件不存在都会报错

  •  4) 处理异常
    

3、示例:

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Test06 {

	public static void main(String[] args) {
		
		
		BufferedInputStream bis = null;
		try {
			//1.创建流对象 (默认缓冲区大小:8192字节)
			bis = new BufferedInputStream(new FileInputStream("io.txt"));
			
			//2.读取数据 
			byte[] bs = new byte[1024];
			int len;
			while((len = bis.read(bs)) != -1){
				System.out.println(new String(bs, 0, len));
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			//3.关闭资源
			if(bis != null){
				try {
					bis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

利用 字符输出转换流 向文件写入数据

1、思路:

  1. 准备要写入文件的数据和文件路径。
  2. 创建一个 FileOutputStream 对象,用于向文件写入字节数据。
  3. 创建一个 OutputStreamWriter 对象,将 FileOutputStream 对象包装在其中,用于将字节流转换为字符流。
  4. 使用 BufferedWriter 对象包装 OutputStreamWriter 对象,以提高写入性能。
  5. 使用 BufferedWriter 对象的 write 方法将字符数据写入缓冲区。
  6. 在适当的时机,调用 BufferedWriter 对象的 flush 方法将缓冲区中的数据刷新到文件中。
  7. 关闭 BufferedWriter 对象和 OutputStreamWriter 对象,确保数据被写入文件并释放资源。
  8. 在必要的情况下处理可能出现的 IOException 异常。

2、注意情况

    1. 不处理异常
    1. 文件存在
    1. 文件不存在
      经验:所有的输出流,当文件不存在时都会创建文件
    1. 文件末尾追加
      经验:考虑基础流的构造方法
    1. 处理异常

注意:使用字符转换流最好加上编码格式!!!!!!!!!!!!!!!!!

3、示例:

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class Test03 {
	public static void main(String[] args) {
		
		
		OutputStreamWriter osw = null;
		try {
			//1.创建流对象(将文件字节输出流 转换为 字符输出转换流)
			osw = new OutputStreamWriter(new FileOutputStream("io.txt",true),"UTF-8");
			
			//2.写入数据
			osw.write("123abc我爱你");
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			//3.关闭资源
			if(osw != null){
				try {
					osw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
	}
}

利用 字符输入转换流 读取文件里的数据

1、思路:

  1. 准备要读取的文件路径。
  2. 创建一个 FileInputStream 对象,用于从文件读取字节数据。
  3. 创建一个 InputStreamReader 对象,将 FileInputStream 对象包装在其中,用于将字节流转换为字符流。
  4. 使用 BufferedReader 对象包装 InputStreamReader 对象,以提高读取性能。
  5. 使用 BufferedReader 对象的 readLine 方法逐行读取文件中的字符数据。
  6. 在适当的时机,处理从 BufferedReader 中读取的字符数据,例如输出到控制台或进行其他处理。
  7. 关闭 BufferedReader 对象和 InputStreamReader 对象,确保文件资源被释放。
  8. 在必要的情况下处理可能出现的 IOException 异常。

2、注意情况:

    1. 不处理异常
    1. 文件存在
    1. 文件不存在
      经验:所有的输入流,在文件不存在时都会报错
    1. 处理异常

    注意:使用字符转换流最好加上编码格式!!!!!!!!!!!!!!!!!

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test07 {
	public static void main(String[] args){
		
		
		InputStreamReader isr = null;
		try {
			//1.创建流对象
			isr = new InputStreamReader(new FileInputStream("io.txt"),"UTF-8");
			
			//2.读取数据
			//isr.read(cs):读入cs数组长度的字符,将字符数据存入到数组中,并返回读取到的有效字节数,如果读取到文件末尾,则返回-1
			char[] cs = new char[1024];
			int len;
			while((len = isr.read(cs)) != -1){
				System.out.println(new String(cs, 0, len));
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			//3.关闭资源
			if(isr != null){
				try {
					isr.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

字节流继承图
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/558148.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术

Java全套智慧校园系统源码springbootelmentui Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术 智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境,这个一体化环境以各种应用服务系统为载体,将教学、科研、管理和校园…

豆瓣影评信息爬取 (爬虫)

代码块: from lxml import etree import requestsheaders{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0 }url_list[] for i in range(0,5):i*20urlsf"https:…

day02-新增员工

day01 新增员工业务逻辑整理 EmployeeController.java PostMappingApiOperation("新增员工")public Result save(RequestBody EmployeeDTO employeeDTO){System.out.println("当前线程的ID:" Thread.currentThread().getId());log.info("新增员工&a…

[leetcode] 56. 合并区间

文章目录 题目描述解题方法排序java代码复杂度分析 题目描述 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区…

UWB人员定位系统适用的场景有哪些?​​​​​​​10厘米工业级实时轨迹高精度定位

UWB人员定位系统适用的场景有哪些?10厘米工业级实时轨迹高精度定位 一、应用场景 1、商场与零售领域:商场可以使用UWB人员定位系统来跟踪顾客的行踪,以收集顾客行为数据,为营销策略提供有力支持。帮助商场优化商品布局和陈列&…

在龙梦迷你电脑福珑2.0上使用Fedora 28 龙梦版

在龙梦迷你电脑福珑2.0上使用Fedora 28 龙梦版。这个版本的操作系统ISO文件是:Fedora28_for_loongson_MATE_Live_7.2.iso 。它在功能方面不错。能放音乐,能看cctv直播,有声音,能录屏,能在局域网里用PuTTY的ssh方式连接…

【Java EE】依赖注入DI详解

文章目录 🌴什么是依赖注入🍀依赖注入的三种方法🌸属性注入(Field Injection)🌸构造方法注入🌸Setter注入🌸三种注入优缺点分析 🌳Autowired存在的问题🌲解决Autowired对应多个对象问…

dp思维 枚举

题目链接 #include<bits/stdc.h> using namespace std; #define i64 long long const i64 mod 1e9 7; int main() {int n;cin >> n;vector<char>s(n 1);for (int i 1; i < n; i) {cin >> s[i];}//用ans记录所有满足条件的答案数量&#xff0c;c…

SQL增加主键约束的条件

结论 常见认为设为主键的条件为&#xff1a; 值唯一不含空值 具体实施中会出现各种问题 添加主键约束的条件细则&#xff1a; 值唯一数据中不含空值在定义时需要not null约束&#xff08;使用check约束不行&#xff09; 验证实验 接下来我做了关于这个细则的验证实验&am…

万物皆可计算|下一个风口:近内存计算-2

虽然PIM可以有缓解内存墙的问题&#xff0c;但是PIM设计面临着一系列技术和工程上的挑战&#xff0c;这些挑战直接影响着PIM技术的实用化和广泛应用&#xff1a; 地址翻译与操作映射&#xff1a; 在传统计算机体系结构中&#xff0c;地址空间由操作系统管理和调度&#xff0c;通…

万物皆可计算|下一个风口:近内存计算-1

传统的冯诺依曼架构虽然广泛应用于各类计算系统&#xff0c;但其分离的数据存储与处理单元导致了数据传输瓶颈&#xff0c;特别是在处理内存密集型任务时&#xff0c;CPU或GPU需要频繁地从内存中读取数据进行运算&#xff0c;然后再将结果写回内存&#xff0c;这一过程涉及大量…

Vue3:响应式数据的基本使用(ref、reactive)

一、前言 在Vue3中&#xff0c;如果数据不是响应式数据&#xff0c;当数据的值发生改变时&#xff0c;页面上的数据是不会发生改变的。因此本文主要介绍Vue3中响应式数据的使用&#xff0c;包括ref和reactive的基本使用。 二、ref 1、ref —— 创建基本类型的响应式数据 re…

电大搜题微信公众号:重庆开放大学学子的学习利器

在当今信息化时代&#xff0c;学习已经成为每个人不可或缺的一部分。然而&#xff0c;对于重庆开放大学的学子们来说&#xff0c;由于远程教育的特殊性&#xff0c;他们面临着更大的学习挑战。幸运的是&#xff0c;他们现在可以依靠一款强大的学习利器——电大搜题微信公众号&a…

软考中级网络工程师-2024上岸宝典

1.软考是什么 简单说就是计算机技术 相关的国家级证书考试&#xff0c;想听专业点给大家截一张官网的图&#xff0c;不想听废话直接往下。 同为国家级证书的&#xff1a;注册会计师、法律职业资格证、一级建筑师&#xff0c;证书的价值是比较高的。 很多人都是在求职前或者大…

【面试经典 150 | 二叉树层序遍历】二叉树的右视图

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;层序遍历方法二&#xff1a;深度优先搜索 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于…

全球媒体发稿:海外发稿数字期刊Digital Journal

全球媒体发稿&#xff1a;海外发稿数字期刊Digital Journal ​官网&#xff1a; digitaljournal.com 数字期刊&#xff0c;加拿大知名门户&#xff0c;月访量超过30万。 是一个全球媒体平台和内容合作伙伴&#xff0c;通过捕捉和报道第一&#xff0c;提升新闻周期中的声…

快手本地生活服务商系统怎么操作?

当下&#xff0c;抖音和快手两大短视频巨头都已开始布局本地生活服务&#xff0c;想要在这一板块争得一席之地。而这也很多普通人看到了机遇&#xff0c;选择成为抖音和快手的本地生活服务商&#xff0c;通过将商家引进平台&#xff0c;并向其提供代运营服务&#xff0c;而成功…

工厂数字化系统是自研,还是对外采购

数字化转型在企业中变得越来越普遍&#xff0c;众多数字化项目的增加也引发了自研和采购数字化系统的讨论。自研和采购各有优劣&#xff0c;需要根据企业的实际情况和需求来做出明智的选择。 自研数字化系统 适用情况&#xff1a;重要核心业务、复用率高、需要长期优化迭代的系…

用队列实现栈(力扣第225题)

#include "stdio.h" #include "stdbool.h" #include "string.h" #include "stdlib.h" #include "assert.h"//初始化队列 typedef int QueueDataType;typedef struct queue {QueueDataType val;struct queue* next; }Qnode;t…

符文协议的演变历程:从挑战到创新

在比特币网络长期面临的挑战中&#xff0c;与主流去中心化金融功能的兼容性一直是一大难题。相比之下&#xff0c;以太坊通过ERC-721和ERC-1155代币标准&#xff0c;为NFT和去中心化金融应用提供了支持&#xff0c;而比特币的应用范围却相对有限。然而&#xff0c;近年来&#…