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>

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

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

相关文章

JAVA安全之Shrio550-721漏洞原理及复现

前言 关于shrio漏洞&#xff0c;网上有很多博文讲解&#xff0c;这些博文对漏洞的解释似乎有一套约定俗成的说辞&#xff0c;让人云里来云里去&#xff0c;都没有对漏洞产生的原因深入地去探究..... 本文从现象到本质&#xff0c;旨在解释清楚Shrio漏洞是怎么回事&#xff01…

(八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB

​ 一、五种算法&#xff08;DBO、LO、SWO、COA、GRO&#xff09;简介 1、蜣螂优化算法DBO 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为…

JSP 报错 Cannot resolve method ‘print(java.lang.String)‘问题解决

这里 我写了一段比较基础的代码 <%// 定义局部变量String message "Hello, JSP!";out.print(message); %>但是 项目跑起来又是可以的 其实就是缺少了 JAR包 依赖 我们 可以在项目环境中找到 pom.xml dependencies标签内 加入 如下代码 <dependency>…

【1567.乘积为正数的最长子数组长度】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:int getMaxLen(vector<int>& nums) {int nnums.size();vector<int> f(n);vector<int> g(n);f[0]nums[0]>0?1:0;g[0]nums[0]<0?1:0…

JS-项目实战-点击水果名修改特定水果库存记录

1、fruit.js function $(name) {if (name) {//假设name是 #fruit_tblif (name.startsWith("#")) {name name.substring(1); //fruit_tblreturn document.getElementById(name);} else {return document.getElementsByName(name); //返回的是NodeList类型}} }//当…

Nginx 修改server_name后无法访问

问题&#xff1a; 在nginx.conf配置中, server_name 为 localhost 时可以正常访问&#xff0c;但改成自定义的域名后无法访问 解决方法&#xff1a; - Window系统 修改本地hosts文件&#xff0c;一般路径在&#xff1a;C:\Windows\System32\drivers\etc\hosts 在文件最后…

【Seata源码学习 】 篇二 TM与RM初始化过程

【Seata源码学习 】 篇二 TM与RM初始化过程 1.GlobalTransactionScanner 初始化 GlobalTransactionScanner 实现了InitializingBean 接口&#xff0c;在初始化后将执行自定义的初始化方法 io.seata.spring.annotation.GlobalTransactionScanner#afterPropertiesSet Override…

C++ 模板 (一)

1. 泛型编程 如何实现一个通用的交换函数呢&#xff1f; void Swap(int& left, int& right) { int temp left; left right; right temp; } void Swap(double& left, double& right) { double temp left; left right; right temp; } void Swap(char&…

【152.乘积最大子数组】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:int maxProduct(vector<int>& nums) {int nnums.size();vector<int> f(n);vector<int> g(n);f[0]g[0]nums[0];int retnums[0];for(int i1;…

如何在聊天记录中实时查找大量的微信群二维码

10-5 如果你有需要从微信里收到的大量信息中实时找到别人发到群里的二维码&#xff0c;那本文非常适合你阅读&#xff0c;因为本文的教程&#xff0c;可以让你在海量的微信消息中&#xff0c;实时地把二维码自动挑出来&#xff0c;并且帮你分类保存。 如果你是做网推的&#…

【AI视野·今日NLP 自然语言处理论文速览 第六十五期】Mon, 30 Oct 2023

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 30 Oct 2023 Totally 67 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers An Approach to Automatically generating Riddles aiding Concept Attainment Authors Niharika Sri Parasa,…

C#WPF文本转语音实例

本文介绍C#WPF文本转语音实例 实现方法:使用类库(SpeechSynthesizer )实现的。 一、首先是安装程序包。 二、创建项目 需要添加引用using System.Speech.Synthesis; UI界面 <Windowx:Class="TextToSpeechDemo.MainWindow"xmlns="http://schemas.micr…

PostgreSQL基于Citus实现的分布式集群

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

这五个步骤,网络有故障,自己都能解决

网络出现故障了怎么办&#xff1f;大部分弱电人一开始无从下手。 网络故障是弱电工作中最易常见的问题&#xff0c;尤其是我们弱电人经常与网络打交道&#xff0c;那么如何才能进行网络排查&#xff0c;快速解决问题呢&#xff1f; 解决和排查网络故障&#xff0c;要有基本的…

【漏洞复现】maccms苹果cms 命令执行漏洞

漏洞描述 感谢提供更多信息。“苹果CMS” 似乎是指 “Maccms”&#xff0c;这是一款开源的内容管理系统&#xff0c;主要用于搭建视频网站。Maccms 提供了一套完整的解决方案&#xff0c;包括用户管理、视频上传、分类管理、数据统计等功能&#xff0c;使用户能够方便地创建和…

Sentinel入门

一、Sentinel介绍 Sentinel 是阿里云开发的一款用于流量控制、熔断降级、系统负载保护的轻量级库。它可以帮助开发者保障系统的稳定性&#xff0c;在分布式服务架构中&#xff0c;Sentinel 能够对服务提供一定的保护&#xff0c;避免因为某个服务的故障而影响全局。 Sentinel …

HMM与LTP词性标注之LTP介绍

文章目录 LTP 上图缺点&#xff1a;参数太多&#xff0c;中文语料库匮乏 注意力机制&#xff0c;相当于给每一个词赋予一个权重&#xff0c;权重越大的越重要。 bert的缺点&#xff1a;神经元太多&#xff0c;较慢。 LTP 如果只是需要做词性的识别&#xff0c;那么用LTP就可…

【MATLAB源码-第80期】基于蚯蚓优化算法(EOA)的无人机三维路径规划,输出做短路径图和适应度曲线

操作环境&#xff1a; MATLAB 2022a 1、算法描述 蚯蚓优化算法&#xff08;Earthworm Optimisation Algorithm, EOA&#xff09;是一种启发式算法&#xff0c;灵感来源于蚯蚓在自然界中的行为模式。蚯蚓优化算法主要模仿了蚯蚓在寻找食物和逃避天敌时的行为策略。以下是蚯蚓…

C语言--字符串详解(多角度分析,什么是字符串?字符串如何存储?字符串如何应用?字符串常用的库函数有哪些?)

目录 一、前言 &#x1f4a6;什么是字符串 &#x1f4a6;字符串如何存储&#xff1f; 二、字符串常量和字符数组 &#x1f4a6;字符串常量 ✨什么是字符串常量&#xff1f; ✨字符串常量与指针 &#x1f4a6;字符数组 ✨字符数组的应用 &#x1f4a6;字符串常量与字符数组的…

手撕无头单链表

&#x1f493; 博客主页&#xff1a;江池俊的博客⏩ 收录专栏&#xff1a;数据结构探索&#x1f449;专栏推荐&#xff1a;✅C语言初阶之路 ✅C语言进阶之路&#x1f4bb;代码仓库&#xff1a;江池俊的代码仓库&#x1f525;编译环境&#xff1a;Visual Studio 2022&#x1f38…