Java面向对象程序开发——文件与流

news2024/11/26 6:19:07

文章目录

  • 前言
  • File类
  • IO字符流与字节流
    • 字符流
    • 字节流
    • 打印流
    • 缓冲流


前言

在这里插入图片描述


File类

是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

方法有三类:1获取、2判断、3创建或删除

public String getAbsolutePath() :返回此File的绝对路径名字符串。
public String getPath() :将此File转换为路径名字符串。
public String getName() :返回由此File表示的文件或目录的名称。
public long length() :返回由此File表示的文件的长度。

  • public boolean exists() :此File表示的文件或目录是否实际存在。
  • public boolean isDirectory() :此File表示的是否为目录。
  • public boolean isFile() :此File表示的是否为文件。

public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
public boolean delete() :删除由此File表示的文件或目录。
public boolean mkdir() :创建由此File表示的目录。
public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。

public static void main(String[] args) throws Exception   {
		String pathSeparator = File.pathSeparator;  //路径分隔符
		String separator = File.separator;//文件名分隔符
		System.out.println(pathSeparator  +"文件名分隔符"+separator);
		File f = new File("D:\\Work\\aaa.txt");
		//System.out.println(f.getAbsolutePath());
		System.out.println(f.exists());//exists()` :此File表示的文件或目录是否实际存在
		System.out.println(f.isDirectory());//此File表示的是否为目录。
		System.out.println(f.isFile());//此File表示的是否为文件。
		System.out.println("----------------1---------------------------");
		File f2 = new File("newDir");
		System.out.println(f2.exists());//此File表示的文件或目录是否实际存在
		System.out.println(f2.mkdir());//创建由此File表示的目录
		System.out.println(f2.exists());//此File表示的文件或目录是否实际存在
		System.out.println(f2.getAbsolutePath());
		System.out.println("---------------2----------------------------");
		System.out.println(f2.delete());
		File f3 = new File("newDir\\newDirb");
		System.out.println(f3.mkdirs());
	}  

输出:

;文件名分隔符\
false
false
false
----------------1---------------------------
true
false
true
E:\ENV20\20220905\newDir
---------------2----------------------------
false
false

IO字符流与字节流

输入流输出流
字节流字节输入流 InputStream字节输出流 OutputStream
字符流字符输入流 Reader字符输出流 Writer

字符流

一切文件数据(文本、图片、视频等)在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此。所以,字节流可以传输任意文件数据。在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终为二进制数据。

输出流

public static void main(String[] args) throws IOException{
		 FileWriter fw = new FileWriter("fw.txt");  //创建输出流对象
		 fw.write(98);  //98对应字符'b'
		 fw.write("b");
		 fw.write("c");
		 fw.write(30000);  //30000对应中文编码表里的汉字:田
		 fw.flush(); //刷新缓冲区,流对象继续使用 
		// fw.close();//刷新缓冲区,流对象不能继续使用 ,资源释放了
	 }

运行后,右键项目选择【Properties】,然后选择该文件的路径
在这里插入图片描述在这里插入图片描述

点进去就可以看到生成的【fw.txt】,输出:bbc田
在这里插入图片描述在这里插入图片描述

输入流

// 输入流,需要在文件路径下先建文件(这里建的是fr.txt)写东西
public static void main(String[] args) throws IOException{
		 FileReader fr = new FileReader("fr.txt");  //创建字符输入流对象
		 int b;//b用来保存数据
		 while((b=fr.read()) != -1) {   
			 //如果读到数据,那么就向下读  fr.read()每次可以读取一个字符的数据,读到文件末尾返回-1
			 System.out.print((char)b);    //如果直接输出b则以int型输出
		 }
		 fr.close();
	 }

字节流

public static void main(String[] args) throws IOException{
		 DataInputStream in = new DataInputStream(new FileInputStream("fr.txt"));
		 BufferedReader d  = new BufferedReader(new InputStreamReader(in));//逐行读取,br extends reader
//		 String count;
//		 while((count = d.readLine()) != null) {
//			 System.out.println(count);
//		 }
		 DataOutputStream out = new DataOutputStream(new  FileOutputStream("test1.txt"));
		 String count;
		 while((count = d.readLine()) != null) {
			out.writeBytes(count+",");
		 } 
		 d.close();
		 out.close();
	 }

打印流

平时我们在控制台打印输出,是调用 print方法 和 println方法完成的,这两个方法都来自于 java.io.PrintStream类,该类能够方便地打印任意类型的值。

public static void main(String[] args) throws IOException{
	 System.out.println(97);   //正常参数类型为字符串型,如果没加引号,也是以打印流形式直接输出了
		 PrintStream ps = new PrintStream("ps.txt");  //实例化打印流对象,输出到ps.txt文件里
		 ps.write(99); //输出99对应的Ascii
		 System.setOut(ps);//调用系统的打印流,改变输出语句的目的地址,保存在ps.txt文件里
} 

缓冲流

能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流等等。
这些功能更为强大的流,都是在基本的流对象基础之上创建而来的,就像穿上铠甲的武士一样,相当于是对基本流对象的一种增强。

例:将括号内的文本信息恢复顺序
【5.半卷红旗临易水,7.报君黄金台上意,3.角声满天秋色里,1.黑云压城城欲摧,8.提携玉龙为君死!4.塞上燕脂凝夜紫。2.甲光向日金鳞开。6.霜重鼓寒声不起。】
1.使用HashMap
2.逐行读信息
3.读完之后把读到的信息放到HashMap
4.通过循环按顺序输出

首先在项目路径下新建一个txt文件,这里起名(ps.txt),然后把要恢复的内容放进去
在这里插入图片描述在这里插入图片描述

public static void main(String[] args) throws IOException {
		// 创建map集合,保存文本数据,键为序号,值为文字
		/* 1.使用HashMap * */
		HashMap<String, String> lineMap = new HashMap<>();
		// 创建流对象 
		BufferedReader br = new BufferedReader(new FileReader("ps.txt"));
		BufferedWriter bw = new BufferedWriter(new FileWriter("fos.txt"));
		// 读取数据  2.逐行读信息
		String line = null;
		while ((line = br.readLine()) != null) {
			// 解析文本
			String[] split = line.split("\\.");
			// 保存到集合
			// 3.读完之后把读到的信息放到HashMap
			lineMap.put(split[0], split[1]);
		}
		// 释放资源
		br.close();
		// 遍历map集合 4.通过循环按顺序输出
		for (int i = 1; i <= lineMap.size(); i++) {
			String key = String.valueOf(i);
			// 获取map中文本
			String value = lineMap.get(key);
			// 写出拼接文本
			bw.write(key + "." + value);
			// 写出换行
			bw.newLine();
		}
		// 释放资源
		bw.close();
	}

这种写法就是在项目路径下生成了 fos.txt ,里面内容则是恢复顺序后的文本信息
在这里插入图片描述

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

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

相关文章

ELK部署安装

目录 一、环境准备 1.准备三台服务器&#xff08;带图形化的linuxCentOS7&#xff0c;最小化缺少很多环境&#xff09; 2.修改主机名 3.关闭防火墙 4.elk-node1、elk-node2 用系统自带的java 5.上传软件包到node1和node2 二、部署elasticsearch 1、node1、node2操作 2.no…

《华尔街幽灵》的三大交易规则

规则1&#xff1a;只持有正确的仓位 如果你下单后经过一段时间&#xff0c;市场没有证明你的交易是正确的&#xff0c;那么应该立即平仓。交易者在每次建仓后&#xff0c;首先应关注保护本金&#xff0c;及早平掉不正确的仓位&#xff0c;而不是过多考虑盈利金额。 如何判断交…

生命在于学习——风险评估

风险评估的目录 一、网络安全风险评估概述1、概念2、意义3、步骤4、基本原则5、评估要素6、网络安全风险评估方法 二、网络安全风险评估方法三、网络安全风险评估方案1、确定评估范围和目标2、收集信息3、评估威胁和漏洞4、评估安全控制5、评估风险和制定建议6、报告和沟通 四、…

匿名苏丹的网络攻击仍在继续: 继微软之后拳头游戏成为最新目标

黑客组织 "匿名苏丹 "声称&#xff0c;它对美国视频游戏开发商和出版商Riot Games发起了分布式拒绝服务&#xff08;DDoS&#xff09;攻击。 据称匿名苏丹的目标是Riot Games的登录门户&#xff0c;该组织在Telegram帖子中宣布&#xff0c;这次攻击持续了30分钟至1小…

《随便测测》做UI测试

目录 前排提示 使用playwright录制ui操作 创建UI模板 运行用例 查看报告 再次编辑代码 再次查看报告 selenoid服务搭建 配置selenoid服务地址 总结 前排提示 1.使用playwright[selenoid]&#xff0c;可选的远程浏览器执行用例 2.没有采用 PageObjectModule&#xff0…

展示与处理复杂JSON数据——gradio库的JSON模块详解

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

从小白到大神之路之学习运维第54天--------ELK技术堆栈---

第三阶段基础 时 间&#xff1a;2023年7月6日 地 点&#xff1a;2304教室 授课人&#xff1a;李凤海 参加人&#xff1a;全班人员 内 容&#xff1a; ELK技术堆栈 目录 服务器设置&#xff1a; 部署elasticsearch集群&#xff1a; 配置elasticsearch集群&#xff…

Vue2中使用ElementUI组件Form组件的校验validate

先准备一些el-form元素 这里面el-form中:model(v-bind:model)是单项绑定的&#xff0c;如果你写成了v-model""可能会出现校验没有效果的情况。 这是校验过后的结果了 现在开始使用下吧&#xff01; 1.在el-form中绑定一个ref&#xff0c;名字自拟,后续触发检验结果…

【数据分析 - 基础入门之NumPy②】Jupyter Notebook安装及使用

知识目录 前言一、Jupyter Notebook安装使用1.1 Jupyter Notebook的三种打开方式1、点击Anaconda Prompt打开2、点击Jupyter Notebook打开3、使用Powershell打开 1.2 Jupyter Notebook的两种键盘输入模式1、编辑模式2、命令模式 二、Jupyter Notebook魔法命令2.1 查看帮助文档2…

2023-07-06:RabbitMQ中的AMQP是什么?

2023-07-06&#xff1a;RabbitMQ中的AMQP是什么&#xff1f; 答案2023-07-06&#xff1a; AMQP AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;是一个应用层协议的开放标准&#xff0c;旨在设计面向消息的中间件。基于AMQP协议的客户端和消息中间件可以自由…

Mysql中IP地址如何在数据库中存储

用无符号的32位整数存储&#xff0c;不要用字符串存储ip 为什么呢&#xff1f; 在Mysql中&#xff0c;当存储ipv4地址的时候&#xff0c;应该使用32位的无符号&#xff08;int unsigned&#xff09;来存储ip地址&#xff0c;而不是使用字符串&#xff0c;用int unsigned类型存…

4-Spring cloud之搭建Ribbon负载均衡——服务器上实操(下)

4-Spring cloud之搭建Ribbon负载均衡——服务器上实操&#xff08;下&#xff09; 1. 前言1.1 Ribbon负载均衡架构图 2. Ribbon自带的负载均衡2.1 Ribbon自带的负载均衡算法2.2 自带负载均衡之间的切换 3. Ribbon自定义负载均衡3.1 自定义Ribbon负载均衡&#xff08;简单试用&a…

【IMX6ULL - LOGO替换】根文件系统主机名logo替换教程

1、修改linux主机的配置文件/etc/hostname里的主机名 2、重启 reboot

2023电商购物网站有哪些知名和靠谱的?

最近几年&#xff0c;人们的消费方式发生了极大的改变&#xff0c;在这种趋势之下&#xff0c;很多企业都开始着手搭建自己的网购平台&#xff0c;下面是小编盘点的国内市场上较为出名的网购平台&#xff0c;大家可以借鉴其运营模式! 1、淘宝网 在中国&#xff0c;淘宝网可以说…

推荐这10款好用的产品设计软件,轻松提效

在现代技术飞速发展的时代&#xff0c;产品设计是创新和成功的关键。本文将向您推荐10款顶级产品设计软件&#xff0c;为您的设计过程增添灵感和效率。 1、即时设计 即时设计是一个基于云的产品设计协作一体化工具&#xff0c;具有很强的功能和灵活性&#xff0c;它提供了全面…

详细解读Sui Gas运作机制和其他你不知道的细节

Sui的Gas费模型使链上交互费用变得可预测而且更低廉&#xff0c;这两个关键特征对面向全球范围内的娱乐和实用apps的基础设施十分关键。区块链的Gas费是指处理事务需要支付的价格&#xff0c;用于补偿和奖励支持网络运行的服务商。 通常&#xff0c;用户支付Gas费来执行网络上…

Webpack打包ts文件

安装依赖包&#xff1a; npm i -D webpack webpack-cli typescript ts-loader 配置webpack配置文件&#xff08;webpack.config.js&#xff09;&#xff1a; //webpack中所有的配置文件信息都得写在module.exports中 module.exports{//指定入口文件entry:./src/index.ts//指定…

terminal 终端Ctrl+Shfit+E键与搜狗输入法冲突Linux

下载完搜狗输入法后&#xff0c;发现CtrlShfitE不能在终端分屏了&#xff0c;原因是和搜狗的快捷键冲突了&#xff0c;把搜狗的禁用了或者换成其它快捷键即可 界面右上角打开搜狗拼音&#xff0c;点击属性设置 把勾去掉或者换其它快捷键

eladmin环境搭建

1、参考这里的简介、快速了解、快速开始 简介 | ELADMIN 在线文档 2、后台我用的是Idea&#xff0c;要记得安装jdk、下载maven&#xff0c;Idea中要记得核对Settings、Project Structure的jdk、maven相关配置。同时也要核对数据库配置是否是好的&#xff0c;数据库是否能连接…

不同ts文件下,提示变量名重复的问题解决

同一个目录的不同文件下使用同一个变量名称出现报错 是因为ts的文件默认是全局文件 发现即使在标签栏关闭 也无法解决&#xff0c; 可以尝试在 报错的文件上加上 export{}&#xff0c;即可完美解决