Java学习之路 —— IO、特殊文件

文章目录

  • 1. I/O
    • 1.1 常用API
    • 1.2 I/O流
      • 1.2.1 字节流
      • 1.2.2 try-catch-finally和try-with-resource
      • 1.2.3 字符流
      • 1.2.4 其他的一些流
  • 2. I/O框架
  • 3. 特殊文件
    • 3.1. Properties
    • 3.2 XML

1. I/O

1.1 常用API

// 1. 创建文件对象File file = new File("E:\\ComputerScience\\java\\IO\\test.txt");// 2. 是否存在路径System.out.println(file.exists());// 3. 判断是否是文件System.out.println(file.isFile());// 4. 判断是否是文件夹System.out.println(file.isDirectory());// 5. 获取文件的名称(包括后缀)System.out.println(file.getName());// 6. 获取文件大小System.out.println(file.length());// 7. 获取文件最后修改时间System.out.println(file.lastModified());// 8. 获取创建文件对象时,使用的路径System.out.println(file.getPath());// 9. 获取绝对路径System.out.println(file.getAbsolutePath());File[] files = file.listFiles();for (File file : files) {System.out.println(file);}

1.2 I/O流

  • I称为输入流:负责把数据读到内存中去
  • O称为输出流:负责写数据出去

按流中数据的最小单位:

  • 字节流:适合操作所有类型的文件
    • 字节输入流:InputStream
    • 字节输出流:OutputStream
  • 字符流:只适合操作纯文本文件
    • 字符输入流:Reader
    • 字符输出流:Writer

1.2.1 字节流

FileInputStream
把磁盘文件中的数据以字节的形式读入到内存中去。
在这里插入图片描述

FileOutputStream
在这里插入图片描述

1.2.2 try-catch-finally和try-with-resource

finally是用于在程序执行完后进行资源释放的操作,即便出现了异常,也会执行finally的代码(专业级做法)

IDEA的快捷键是ctrl + alt + t

try {test4();
} catch (Exception e) {e.printStackTrace();
} finally {System.out.println("执行结束");
}

try-with-resource是JDK7后有的,更加简洁,不需要写finally这个臃肿的代码块。即不需要我们去写一些close代码了,只需要在try的时候放到小括号里面。

static void test4() throws Exception {// 注意,括号里面只能放置资源对象try (OutputStream os = new FileOutputStream("test2.txt", true);) {byte[] bytes = "我爱你中国".getBytes();os.write(97);os.write(bytes);// 换行os.write("\r\n".getBytes());} catch (IOException e) {throw new RuntimeException(e);}}

1.2.3 字符流

字节流适合复制文件,但不适合读写文本文件;而字符流更适合读写文本文件内容。

字符流读文件,会把每一个字母、函字看成一个字符,所以不会出现乱码的问题。

FileReader(文件字符输入流)
在这里插入图片描述

static void test1() {try (Reader fr = new FileReader("test.txt");) {// 1. 一个一个的读取
//            int c;  // 记住每次读取的字符编号
//            while ((c = fr.read()) != -1) {
//                System.out.print((char) c);
//            }// 2. 读取多个字符int len;char[] buf = new char[3];while((len = fr.read(buf)) != -1) {System.out.print(new String(buf, 0, len));}} catch (Exception e) {e.printStackTrace();}}

FileWriter

字符输出流写出数据后,必须刷新流,或者关闭流,写出去的数据才能生效!!!
在这里插入图片描述

1.2.4 其他的一些流

还有一些其他的流,就不一一列举了。

  • 字节缓冲流
    • 作用:提高字节流读写数据的性能
    • 原理:字节缓冲输入流自带了8KB缓冲池,字节缓冲输出流自带了8KB缓冲池
  • 转换流InputStreamReader/OutputStreamWriter
    • 作用:解决不同编码时,字符流读取文本内容乱码的问题
    • 解决思路:先获取文件的原始字节流,再将其按照真实的字符集编码转成字符输入流,这样字符输入流中的字符就不乱码了
  • 打印流PrintStream/PrintWriter
    • 作用:可以实现更方便、更高效的打印数据出去,能实现打印啥出去就是啥出去
  • 数据流DataInputStream/DataOutputStream
    • 允许把数据和其类型一并写出去
  • 序列化流
    • 对象序列化:把Java对象写入到文件中去
    • 对象反序列化:把文件里的Java对象读出来
    • 注意:对象如果要参与序列化,必须实现序列化接口(java.io.Serializable)

2. I/O框架

Commons-io是apache提供的一组有关IO操作的小框架,目的是提高IO流的开发效率。需要去Apache官网下载。
在这里插入图片描述

3. 特殊文件

3.1. Properties

  • 是一个Map集合(Json类似)
  • 核心作用:Properties用来代表属性文件,通过Properties可以读写属性文件里的内容
    在这里插入图片描述
public class Properties_Demo1 {public static void main(String[] args) throws Exception {// 1. 创建一个Properties对象Properties properties = new Properties();// 2. 加载属性文件的键值对到对象中properties.load(new FileReader("src\\users.properties"));System.out.println(properties);// 3. 根据键取值System.out.println(properties.getProperty("张无忌"));properties.forEach((k, v) -> {System.out.println(k + "  " + v);});}
}

3.2 XML

  • XML本质是一种数据格式,可以存储复杂的数据结构,和数据关系。
  • 应用场景:经常用来作为系统的配置文件;或者作为一种特殊的数据结构,在网络中进行传输。
<?xml version="1.0" encoding="UTF-8" ?>
<!--以上抬头声明必须放在第一行,必须有!-->
<!--根标签只能有一个-->
<users><user id = "1"><name>JehanRio</name><sex></sex><password>123456</password></user><user id = "2"><name>Bjergsen</name><sex></sex><password>654321</password></user>
</users>

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 PPO 算法进行 RLHF 的 N 步实现细节

当下&#xff0c;RLHF/ChatGPT 已经变成了一个非常流行的话题。我们正在致力于更多有关 RLHF 的研究&#xff0c;这篇博客尝试复现 OpenAI 在 2019 年开源的原始 RLHF 代码库&#xff0c;其仓库位置位于 openai/lm-human-preferences。尽管它具有 “tensorflow-1.x” 的特性&am…

期望、方差

一、期望和方差的定义 随机变量(Random Variable) X 是一个映射&#xff0c;把随机试验的结果与实数建立起了一一对应的关系。而期望与方差是随机变量的两个重要的数字特征。 1. 期望(Expectation, or expected value) 期望是度量一个随机变量取值的集中位置或平均水平的最基…

大会技术“硬核”资讯来啦!点击预约 IoTDB 现场一对一调优咨询服务

承诺大家的&#xff0c;2023 IoTDB 用户大会现场“快讯”第一弹来啦&#xff01; 我们将在大会现场设置 IoTDB Workshop&#xff0c;IoTDB 原厂团队将免费提供一对一技术咨询、使用调优、疑问解答等服务。 现场提供的一对一咨询、调优时长为 30 分钟&#xff0c;在您预约的时间…

前后端分离项目在Linux的部署方法、一台Nginx如何部署多个Web应用

需求场景&#xff1a;目前有三个前后端分离项目&#xff08;vuespringboot&#xff09;&#xff0c;Linux服务器一台&#xff0c;nginx一个&#xff0c;比如服务器地址为www.xxxxxxx.com 我想通过80端口访问服务①(即访问www.xxxxxxx.com)&#xff1b;通过81端口访问服务②(即…

android 数独小游戏 经典数独·休闲益智

一款经典数独训练app 标题资源下载 &#xff08;0积分&#xff09;https://download.csdn.net/download/qq_38355313/88544810 首页页面&#xff1a; 1.包含有简单、普通、困难、大师四种难度的数独挑战供选择&#xff1b; 记录页面&#xff1a; 1.记录用户训练过的数独信息&…

容性负载箱与电容器的关系是什么?

容性负载箱用于测试电容器性能的设备&#xff0c;电容器是储存电能的元件&#xff0c;具有储存和释放电荷的能力。容性负载箱通过对电容器施加不同的负载&#xff0c;可以测量电容器的容量、电压响应、损耗等参数。 容性负载箱与电容器的关系主要体现在以下几个方面&#xff1a…

OpenCV入门5——OpenCV的算术与位运算

文章目录 图像的加法运算图像的减法运算图像的乘除运算图像的融合OpenCV位运算-非操作OpenCV位操作-与运算OpenCV位操作-或与异或为图像添加水印 图像的加法运算 # -*- coding: utf-8 -*- import cv2 import numpy as npimg cv2.imread(E://pic//4.jpg)# 图的加法运算就是矩阵…

监控直流防雷浪涌保护器综合方案

监控系统是一种广泛应用于安防、交通、工业、军事等领域的信息系统&#xff0c;它通过摄像机、传输线路、监控中心等设备&#xff0c;实现对目标区域的实时监视和控制。然而&#xff0c;监控系统也面临着雷电的威胁&#xff0c;雷电可能通过直击雷、感应雷、雷电波侵入等途径&a…

苹果电脑杀毒软件cleanmymac2024

苹果电脑怎么杀毒&#xff1f;这个问题自从苹果电脑变得越来越普及&#xff0c;苹果电脑的安全性问题也逐渐成为我们关注的焦点。虽然苹果电脑的安全性相对较高&#xff0c;但仍然存在着一些潜在的威胁&#xff0c;比如流氓软件窥探隐私和恶意软件等。那么&#xff0c;苹果电脑…

系列三、GC垃圾回收【总体概览】

一、GC垃圾回收【总体概览】 JVM进行GC时&#xff0c;并非每次都对上面的三个内存区域&#xff08;新生区、养老区、元空间/永久代&#xff09;一起回收&#xff0c;大部分回收的是新生区里边的垃圾&#xff0c;因此GC按照回收的区域又分为了两种类型&#xff0c;一种是发生在新…

怎么去掉邮件内容中的回车符

上图是Outlook 截图&#xff0c;可见1指向的总有回车符&#xff1b; 故障原因&#xff1a; 不小心误按了箭头4这个选项&#xff1b; 解决方法&#xff1a; 点击2箭头确保tab展开&#xff1b; 点击3以找到箭头4. 取消勾选或者多次点击&#xff0c;即可解决。

React实战演练项⽬一需求分析及vite_react搭建项目

React实战演练项⽬一需求分析及项目初始化 需求分析 刚学完React,开始找项目进行上手练习&#xff01; 页面组件拆分&#xff1a; 头部&#xff1a;导航tab、搜索框、登录注册 中间&#xff1a;分类导航、轮播图、新人福利、高单价产品导航 课程分类列表、底部内容、登陆提…