Java--IO流详解

news2024/9/25 7:14:34

目录

一、IO流的介绍

二、IO流的具体详解

(1)字节流

1:FileOutputStream

2:FileInputStream

(2)字符流

1:解码编码

 2:FileReader

3:FileWriter

三、IO流的使用

(1)文件拷贝

(2)拷贝文件夹

(3)加密和解密文件


一、IO流的介绍


IO流是用于读写文件中的数据(可以读写文件,或网络中的数据...),IO流中流的方向分为输入流(读取文件)和输出流(往文件中写入数据);操作文件类型分为字节流(操作所有类型的文件)
和字符流(操作纯文本文件),不仅仅如此,字节流的读取都是一个字节一个字节的读取,所以一般用它读取英文,字符流是一次读取多个字节,具体几个字节看是英文还是中文以及编码方式了(对于字节这些不是很理解的同学可以看一下这篇文章  :  字符集详解)

二、IO流的具体详解

(1)字节流

FileInputStream:字节输入流(读取文件中的数据)
FileOutputStream:字节输出流(往文件中写入数据)

1:FileOutputStream

字符输出流的使用:
1、创建对象
2、写入数据
3、释放资源(如果不释放资源的话,对于操作的文件会被Java给占用,那么你想对他做一些其它的操作就无法进行,如删除文件操作)

字符输出流的细节:
1:参数是路径或者是File对象
2:如果文件不存在则会创建一个新的文件,但是要保证父级路径存在
3:如果文件存在的话,会清空文件内容,不想清空,在创建对象时第二个参数可以写true

4:write方法的参数是整数,但实际写到文件上的是整数对应的ASCII字符



如果先要换行的话再次写出一个换行符就可以了
windows:\r\n
Linux:\n
Mac:\r
public class Fu{
	public static void main(String[] args) throws IOException {
		FileOutputStream s=new FileOutputStream("D:\\java\\7.txt");
		s.write(97);
		s.close();
	}
}

这里我们一般都不清楚ASCII值对应的字符,所以能不能想写什么不需要知道对应的ASCII呢(这里说的是英文,中文使用字符流)

	public static void main(String[] args) throws IOException {
		FileOutputStream s=new FileOutputStream("D:\\java\\7.txt",true);
		String k="klkl";
		byte[] b=k.getBytes();
		String kk="\r\n";
        byte[] bb=kk.getBytes();
        s.write(bb);//换行
       	s.write(b);
		s.close();
		
		
	}

2:FileInputStream



(2)字符流

1:解码编码

编码:
public byte[] getBytes()                                使用默认方式进行编码,使用idea默认是 
                                                        用的方式是utf-8,使用eclipse默认是用 
                                                        的是gbk
public byte[] getbytes(String charsetName)              使用指定方式进行编码
解码:
String(byte[] bytes)                                    使用默认方式进行解码
String(byte[] bytes,String charsetName)                 使用指定方式进行解码
public static void main(String[] args) throws IOException {
		String s="as你好啊,牛牛";
		byte[] b=s.getBytes();
		System.out.println(Arrays.toString(b));
		
		String ss=new String(b);
		System.out.println(ss);
	}

 2:FileReader

1:创建对象
2:读取数据
3:释放资源
public static void main(String[] args) throws IOException {
		FileReader s=new FileReader("D:\\java\\7.txt");
		int c;
		while((c=s.read())!=-1) {
			System.out.print((char)(c));
		}
		s.close();
	}

3:FileWriter

public static void main(String[] args) throws IOException {
		FileWriter s=new FileWriter("D:\\java\\7.txt");
		s.write("你是是的呢");
		s.close();
	}

三、IO流的使用

(1)文件拷贝

核心思想就是边读边写,这个代码适合小文件。

public static void main(String[] args) throws IOException {
		FileInputStream s=new FileInputStream("D:\\java\\7.txt");
		FileOutputStream ss=new FileOutputStream("D:\\java\\8.txt");
		
		int c;
		while((c=s.read())!=-1) {
		  ss.write(c);
		}
	}

大文件可以这样写:

public static void main(String[] args) throws IOException {
		FileInputStream s=new FileInputStream("D:\\java\\7.txt");
		FileOutputStream ss=new FileOutputStream("D:\\java\\8.txt");
		int len;//每一次读取的数据的长度
		byte[] b=new byte[1024*1024*5];
		while((len=s.read(b))!=-1) {
			ss.write(b,0,len);//从0位置读取,读取len个数据
		}
		ss.close();//注意释放资源的顺序哦,先开的后关
		s.close();
	}

(2)拷贝文件夹

注意哈,这里是拷贝文件夹,不是拷贝文件,所以文件夹里的文件和文件夹也是要拷贝的哦!

public static void main(String[] args) throws IOException {
		File src=new File("D:java\\a");
		File des=new File("D:java\\bbb");
		cop(src,des);
	}
	public static void cop(File src,File des) throws IOException {
		File[] file=src.listFiles();
		
		for(File f:file) {
			if(f.isFile()) {
				//是文件
				FileInputStream fin=new FileInputStream(f);
				FileOutputStream fout=new FileOutputStream(new File(des,f.getName()));
				int len;
				byte[] b=new byte[1024];
				while((len=fin.read(b))!=-1) {
					fout.write(b,0,len);
				}
				fout.close();
				fin.close();
			}
			else {
				//是文件夹
				cop(f,new File(des,f.getName()));
			}
		}
	}

(3)加密和解密文件

加密解密,加密其实就是如果你想对一个文件加密的话,其实就是在创建一个文件(这就是加密过的文件),然后你想解密的话就是对于加密文件在创建一个文件(解密文件),将数据在传到解密文件中。

FileInputStream fin=new FileInputStream("D:java\\6.webp");
	   FileOutputStream fout=new FileOutputStream("D:java\\7.webp");
	   int b;
	   while((b=fin.read())!=-1) {
		   fout.write(b^2);
	   }
	   fout.close();
	   fin.close();

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLB|基于改进教学的优化算法(TLSBO)的最优功率优化

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 📝目前更新:🌟🌟🌟电力系统相关知识,期刊论文&…

使用 Zabbix 监控Oracle

zabbix ODBC 数据库监控 ODBC 是 C 语言开发的、用于访问数据库的中间件接口.zabbix 支持查询任何 ODBC 支持的数据库.zabbix 经过调用 ODBC 来获取数据库的数据以及数据库状态等等信息 一、安装unixODBC 官方主页:http://www.unixodbc.org/download.html 使用阿里巴巴提供的…

线性方程组迭代法

雅可比迭代法与高斯-塞德尔迭代法 雅可比迭代法 例一 {10x1−x2−2x37.2−x110x2−2x38.3−x1−x25x34.2\left\{\begin{array}{l} 10 x_{1}-x_{2}-2 x_{3}7.2 \\ -x_{1}10 x_{2}-2 x_{3}8.3 \\ -x_{1}-x_{2}5 x_{3}4.2 \end{array}\right. ⎩⎨⎧​10x1​−x2​−2x3​7.2−x…

Css-Grid布局(强大)

前言 我们前面讲的Flex布局是轴线布局,只能指定"项目"针对轴线的位置,可以看做是一维布局,Grid布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格&…

从手动测试到自动化测试老司机,只用了3个月,我的薪资翻了一倍

虽然笔者是一个测试老人了,但是基本上所有的测试经验都停留在手工测试方面,对于自动化测试方面的实战经验少之又少,可以说,从这个角度来说,就像生活在原始社会,一切靠双手解决问题。(别想歪了&a…

【深度学习】李宏毅2021/2022春深度学习课程笔记 - Deep Learning Introduction

文章目录一、深度学习的概念二、函数的类型三、深度学习的步骤3.1 定义一个参数未知的函数表达式3.2 定义一个损失函数3.3 采用梯度下降法求解使得函数表达式的Loss最小的参数四、视频播放量预测案例4.1 案例介绍和思路分析4.2 线性函数表达式14.3 改进1:使用前一段…

此文件存在危险因此chrome已将其拦截

当您尝试在 chrome 中下载一些文件时,有时 chrome 会说“此文件可能很危险,因此 Chrome 已阻止它”。这可能是因为 Chrome 的内置安全功能可能已将其检测为可能有害的文件。但是,如果您信任文件的来源并想要下载它,那么您可以按照…

authorization server client resource 使用1

authorization server && client && resource 使用1 OAuth2介绍 OAuth(Open Authorization)是一个关于授权(authorization)的开放网络标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上…

leetcode.1691 堆叠长方体的最大高度 - dp + 排序

1691. 堆叠长方体的最大高度 目录 1、java 2、c 思路: 根据题目描述,长方体 j 能够放在长方体 i 上,当且仅当 题目允许旋转长方体,也就是可以选择长方体的任意一边作为长方体的高。 对于任意一种合法的堆叠&#xff0…

聊一聊三级等保

本文为joshua317原创文章,转载请注明:转载自joshua317博客 聊一聊三级等保 - joshua317的博客 一、前言 1.1 基本认知 网络安全:根据《信息安全技术网络安全等级保护基本要求》(GB/T 22239-2019),是指通过采取必要措…

m基于功率谱,高阶累积量和BP神经网络-GRNN网络的调制方式识别仿真,对比2psk,4PSK,2FSK以及4FSK

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 首先区分大类的话采用的基于功率谱提取的len参数(峰值频率间隔),用峰值个数来代替,这样能很好的区分大类把MFSK和MPSK信号区分开。 针对MPSK&…

VSCode-远程连接服务器进行开发

一:安装插件 二:设置SSH 按照划线位置依次配置要连接的服务器配置 三:打开远程连接选项 勾选此选项后即可显示配置好的远程服务器,点击登录即可。 输入服务器用户密码 注意 :终端框install不要关闭!&#…

基于MPS算法和改进的非支配排序遗传算法II(MNSGA-II)求解配备起重机的模糊鲁棒设施布局问题(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

【C语言航路】第八站:调试(第二幕)

目录 四、一些调试的实例 1.实例一 2.实例二 五、如何写出优秀的,易于调试的代码 1.优秀的代码 2.几个经典的例子 (1)模拟实现strcpy函数 (2)模拟实现strlen 六、编程常见的错误 1.编译型错误 2.链接型错误 …

Spring学习:学完总结

前言: 此次学习大概花了6天的时间,不过只是浅浅的学到了皮毛,所以后面有新的理解就会持续更新!下面是一些重点总结。 总结: 一、Spring概述 1.1 什么是Spring (1)全称:EJB(sun企…

alibaba微服务组件sentinel

alibaba微服务组件sentinel 官方文档:https://sentinelguard.io/zh-cn/docs/introduction.html 官方示例:https://github.com/alibaba/Sentinel/tree/master/sentinel-demo 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Senti…

MYSQL数据库-索引

MYSQL数据库-索引零、前言一、索引概念二、认识磁盘三、理解索引1、如何理解Page2、B vs B3、聚簇索引 VS 非聚簇索引4、普通索引5、总结四、索引操作1、创建索引2、查询索引3、删除索引零、前言 本章主要讲解MYSQL数据库中的索引这一重要知识点 一、索引概念 索引的价值&…

Allegro如何打印光绘层操作指导Plot模式

Allegro如何打印光绘层操作指导Plot模式 Allegro支持把视图打印成pdf格式的文件,下面介绍用plot模式打印,具体操作如下 打开光绘设置 确保光绘设置都是正确的 选择file-plot setup 出现打印设置的参数,常规默认即可,如果需要打印黑白的,选择Black and white 选择ok …

无人机无线传感器网络中的节能数据采集(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

【LeetCode】1691. 堆叠长方体的最大高度

题目描述 给你 n 个长方体 cuboids &#xff0c;其中第 i 个长方体的长宽高表示为 cuboids[i] [widthi, lengthi, heighti]&#xff08;下标从 0 开始&#xff09;。请你从 cuboids 选出一个 子集 &#xff0c;并将它们堆叠起来。 如果 widthi < widthj 且 lengthi < le…