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

news2024/10/7 16:21:35

文章目录

  • 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.coloradmin.cn/o/1217110.html

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

相关文章

《C++避坑神器·二十三》C++异常处理exception

有些时候无法设置弹出提示信息或者发送提示信息&#xff0c;时候可以抛出异常来提示各种情况 定义自己的异常 GetPostion()函数内部抛出了异常&#xff0c;所以在捕获异常的时候try要把这个函数包住&#xff0c; Catch()里面写throw后面的类&#xff0c;然后catch内部通过调…

MIB 操作系统Lab: Xv6 and Unix utilities(1)boot xv6

从github中下载xv6代码 $ git clone git://g.csail.mit.edu/xv6-labs-2023 $ cd xv6-labs-2023 编译和运行xv6: $ make qemu 如果在终端输入ls命令&#xff0c;能看到输出。 大多数都是可以直接运行的命令。 xv6没有ps命令&#xff0c;但是可以输入ctrl-p可以看到进程的信…

不加家长好友,如何私密发成绩?

身为老师的你&#xff0c;是否经常收到家长们的询问&#xff0c;要求你告知他们孩子的成绩&#xff1f;而你却因为规定&#xff0c;不能直接将成绩公布&#xff1f;那么&#xff0c;如何解决这个问题呢&#xff1f; 成绩查询系统。是专门为学生和家长提供成绩查询服务的系统。可…

LeetCode - #89 格雷编码

文章目录 前言1. 描述2. 示例3. 答案关于我们 前言 我们社区陆续会将顾毅&#xff08;Netflix 增长黑客&#xff0c;《iOS 面试之道》作者&#xff0c;ACE 职业健身教练。&#xff09;的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新…

转录组测序学习第二弹

安装软件 前面已经安装好了conda&#xff0c;那么我们现在需要安装我们后续需要用到的软件 1.先进入我们前面建立的虚拟环境中 conda activate my_env2.安装软件 conda install -y sra-tools conda install -y trimmomatic conda install -y cutadapt multiqc conda install…

(Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分代码&#xff1a; 四、完整代码数据说明手册&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matalb平台…

docker数据卷详细讲解及数据卷常用命令

docker数据卷详细讲解及数据卷常用命令 Docker 数据卷是一种将宿主机的目录或文件直接映射到容器中的特殊目录&#xff0c;用于实现数据的持久化和共享。Docker 数据卷有以下特点&#xff1a; 数据卷可以在一个或多个容器之间共享和重用&#xff0c;不受容器的生命周期影响。…

易点易动固定资产管理系统:提升企业固定资产领用效率的智慧选择

在现代企业管理中&#xff0c;固定资产的有效管理对于企业的运营和发展至关重要。然而&#xff0c;传统的固定资产领用流程常常繁琐、低效&#xff0c;导致领用效率低下、信息不透明等问题。为了帮助企业解决这些难题&#xff0c;易点易动固定资产管理系统应运而生。本文将介绍…

基于SpringBoot+Vue的新能源汽车充电桩管理系统

基于SpringBootVue的新能源汽车充电桩管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 充电桩详情 管理员界面 摘要 本项目是基于Spring Boot 和 …

C++ 之字符串、字符数组与字符指针(*、**)

C 之字符串、字符数组与字符指针(*、**) 最近频繁使用字符串指针&#xff0c;有时候想取值或者复制&#xff0c;常用到问题&#xff0c;在此总结一下字符串的处理、指针的使用长期更新版~ 1. char 使用相关 1.1 内存使用 首先介绍一下C语言中的数据类型&#xff1a; 下图给…

如何实时提取微信群收到的二维码图片?

10-4 在有些工作中&#xff0c;需要实时提取在微信中收到的二维码图片&#xff0c;比如微信里有一百个群&#xff0c;怎么才能知道这些群里发了二维码出来&#xff0c;要实现这样的功能&#xff0c;微信本身并不提供&#xff0c;但是可以通过一些其它技巧完成。 大概的原理是…

【教3妹学编程-算法题】购买物品的最大开销

3妹&#xff1a;2哥&#xff0c;听说你今天发工资啦&#xff1f; 请我吃饭怎么样&#xff0c;嘿嘿 2哥 : 切&#xff0c;你上周还发工资了呢&#xff0c;也没见你请我吃饭。 3妹&#xff1a;哎呀&#xff0c; 我的工资都用来双11 shopping了&#xff0c; 双11过后我都吃了1周土…

Mac电脑VSCode配置PHP开发环境

1.安装 PHP 首先&#xff0c;打开终端&#xff0c;安装 Homebrew&#xff0c;输入如下命令&#xff1a; $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 安装了 Homebrew 之后&#xff0c;你可以使用下面的…

优思学院|新版ISO9001:2015质量体系的优势(一)高阶结构

在全球商业环境中&#xff0c;不断提高产品和服务的质量至关重要。因此&#xff0c;国际标准组织&#xff08;ISO&#xff09;于2015年发布了更新的ISO 9001标准&#xff0c;即ISO 9001:2015质量体系标准。这一更新旨在适应不断变化的商业需求和挑战&#xff0c;为组织提供更强…

LeetCode - 27. 移除元素 (C语言,快慢指针,配图)

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 思路一&#xff1a;新开辟一个数组&#xff0c;空间复杂度O(N) 因为本题要求是空间复杂度O(1),所以这里只是列出思路1的思路和配图&#xff0c;并没有具体的实现代码&#xff0c;想必这对大家一定很简单…

云服务器windows service2022 部署git服务器

1 安装 下载地址gitblit 解压到你的一个目录,我这里给的是C:\gitblit 根据官网提示要下载jre or jdk7.0,这里建议使用下载jre (jdk 有时候运行出问题,或者2个都安装),自行安装java,这里不做环境配置的说明 ==================================== 进入c:\gitblit\data 目录里面…

场景图形管理-多视图多窗口渲染示例(4)

多视图多窗口渲染示例的代码如程序清单8-6所示 // 多视图多窗口渲染示例 void compositeViewer_8_6(const string &strDataFolder) {// 创建一个CompositeViewer对象osg::ref_ptr<osgViewer::CompositeViewer> viewer new osgViewer::CompositeViewer();// 创建两个…

人体状态检测YOLOV8 NANO

人体状态检测Y8N&#xff0c;能检测站立、奔跑、跌倒、坐下、蹲下五种状态&#xff0c;采用YOLOV8NANO训练&#xff0c;转换成ONNX&#xff0c;OPENCV DNN调用&#xff0c;支持C/PYTHON/ANDROID开发 人体状态检测Y8N

卷积神经网络(CNN)多种图片分类的实现

文章目录 前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;我的环境&#xff1a; 2. 导入数据3.归一化4.可视化 二、构建CNN网络模型三、编译模型四、训练模型五、预测六、模型评估 前期工作 1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#…