【剧前爆米花--爪哇岛寻宝】java文件操作和io流

news2024/11/9 2:20:16

作者:困了电视剧

专栏:《JavaEE初阶》

文章分布:这是一篇关于文件操作的文件,介绍了文件读写以及相关对象的内容,希望对你有所帮助!

 

目录

文件操作

文件路径

绝对路径

相对路径

File类

File类的构造方法

文件内容的读写——数据流

字节流

字符流


文件操作

我们平时谈到的“文件”,指的都是硬盘上的文件,但是由于硬盘访问速度慢等特性,我们的代码绝大多数都是围绕内存进行展开。

MySQL主要就是操作硬盘,文件IO在这里主要也是操作硬盘。

文件操作主要分为两个部分:

1.文件系统操作

   创建文件,删除文件,重命名文件以及创建目录等

2.文件内容操作

   针对文件内容进行读 和 写。

文件路径

这地方就是每一个文件的路径,指向一个文件的具体位置。

计算机的目录是有层级结构的,可以将文件的存储想象成一个树型结构,这样文件路径就可以理解为,从树的根节点出发,沿着树枝,一路往下走,到达目标文件,此时这中间经过的内容。

绝对路径

从盘符开始,一层一层向下找,这个过程得到的路径就是绝对路径。

如上图所示,此时D:/bitStudy/bit_java/tmp就是该文件的绝对路径.

注:这里要是用正斜杠不要使用反斜杠,使用反斜杠在编写代码的时候需要打两次进行转义,但正斜杠则不需要。

相对路径

从给定的某个目录出发,一层一层往下找,这个过程得到的路径就是相对路径。

一定要明确,基准目录(工作目录)是什么,否则则很有可能出错

tips:.在相对路径中是一个特殊符号,表示当前目录。

        .. 也是特殊符号,表示当前目录的上级目录,就比如:

我现在想访问c_c++这个目录文件,但是我的基准目录到bitStudy,怎么办?答案:直接使用../。

../ c_c++,../让我们到了D:/这一层,在直接访问即可。

举个栗子:

比如我的工作目录是D:/bitStudy,那我的相对路径就可以表示为:

./bit_java/tmp

File类

java标准库,给我们提供了File这个类,我们的代码为了提高效率并不直接操控硬盘而是内存,这个File对象就是硬盘上的一个文件的“抽象”表示。

文件是存储在硬盘上的。

直接通过代码操作硬盘并不方便,于是就在内存中创建一个对应的对象,操作这个内存中的对象,就可以间接的影响到硬盘的文件情况了。

File类的构造方法

文件内容的读写——数据流

针对文本文件,提供了一组类,统称为“字符流”(典型代表 Reader, Writer),他读写的基本单位是字符。

针对二进制文件,也提供了一组类,统称为“字节流”(典型代表 InputStream,OutputStream),读写的基本单位是字节。

使用数据流必须要在使用结束后进行关闭,否则在某些环境下会造成很严重的问题。这几个典型类都实现了一个Closeable接口。

当我们在使用实现这些接口的类时,可以使用这样的一个语法:

 这样,当我们执行完try括号中的语句后,就会自动关闭流,降低出错的可能。 

字节流

public class Test {
    public static void main(String[] args) throws FileNotFoundException {
        File file = new File("d:/bitStudy/bit_java/tmp/test.txt");

        try (InputStream inputStream = new FileInputStream(file)){
            while (true){
                int b = inputStream.read();
                if (b == -1){
                    break;
                }
                System.out.println(b);
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

我的上述代码实现的功能是将该文件中的内容用字节的方式读出来,结果如下: 

由图我们可以看到,java将文件中的内容用ASCII码的形式读了出来,这就是字节流。

字符流

字符流相关的方法比较多,在这里我先梳理一下,首先Writer是一个抽象类,PrintWriter类,OutputStreamWriter类继承Writer类,FileWriter类继承OutputStreamWriter类

public class Test {
    public static void main(String[] args) throws FileNotFoundException {
        File file = new File("d:/bitStudy/bit_java/tmp/test.txt");
        try (InputStream inputStream = new FileInputStream(file)){
            Scanner scanner = new Scanner(inputStream);
            while (scanner.hasNext()){
                String  b = scanner.next();
                System.out.println(b);
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

当我们用字符流读文件的时候,结果就是我们文件中的内容:

 我们再读取二进制文件的时候一般使用字节流进行读取,读取一些类似文本文件的时候一般会用字符流进行读取。

以上就是本篇博客的全部内容,如有疏漏还请指正!

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

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

相关文章

REDIS Hash 槽 与 一致性hash

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

Spring boot+Vue3博客平台:文章发布与编辑功能的技术实现

本文将详细介绍如何实现一个博客平台中的文章发布与编辑功能,包括前端的Vue组件设计和后端的Spring Boot接口实现。在阅读本文后,您将了解如何设计和实现高效、易用的文章发布与编辑功能。 一、发布文章 设计思路 在设计文章发布功能时,我们…

vscode中调试rust程序

文章目录一、vscode运行和调式rust程序二、常见问题1.rust: Request textDocument/formatting failed.2.cargo命令3.使用rust-gdb调试rust程序4.cargo build太慢一、vscode运行和调式rust程序 环境:在WSL(ubuntu20.04)中使用vscode &#xf…

数据技术嘉年华星光璀璨,云和恩墨全栈数据技术能力闪耀会场

导语 2023年4月7-8日,由中国DBA联盟(ACDU)和墨天轮社区联合主办的第十二届『数据技术嘉年华』(DTC 2023)在北京成功举办。云和恩墨作为大会的协办方和深度参与者,以6场演讲2大展台全面呈现公司的全栈数据技…

几何算法——4.交线(intersection curve)的表达与参数化、微分性质

几何算法——4.曲面求交的交线(intersection curve)的表达与参数化、微分性质1 关于曲面求交的交线表达2 交线的微分性质3 交线的参数化4 修正弦长参数化的微分性质1 关于曲面求交的交线表达 两个曲面求交,比较经典的方法是用跟踪法&#xf…

wsl使用vscode搭建自己的MySQL

装wsl装MySQL装wsl 我已经装好了,就不说了 装MySQL 安装 MySQL 服务器:终端命令行输入sudo apt install mysql-server 安装完成后,MySQL 服务器会自动启动并在 Ubuntu 启动时启动。您可以使用以下命令检查 MySQL 服务器是否正在运行:sudo ser…

【三十天精通Vue 3】第六天 Vue 3 计算属性和监听器详解

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录引言一、Vue 3 计算属性概述1.1 计算属性的简介1.2 计算属性的分类…

第二十章 案例TodoList之动态数据

我们之前已经实现了静态的组件拆分,既然是静态说明数据就是死的,显然这不是我们需要的结果,之前我们学习了React组件,知道组件里面的状态数据驱动了页面的显示,每个组件都有属于自己的状态数据。接下来我们改造组件使得…

SAR ADC系列25:作业和上机实践

作业: 异步SAR逻辑中VALID信号如何产生?答:OUTP和OUTN与非。单纯通过减小“比较器环路”的延时(t1t22*t32*t4)的方式来提升ADC的转换速率可行吗?为什么?答:不可行,还要考虑CDAC建立的速度&…

【ARMv8 编程】A64 数据处理指令——位域字节操作指令

有些指令将字节、半字或字扩展到寄存器大小,可以是 X 或 W。这些指令存在于有符号(SXTB、SXTH、SXTW)和无符号(UXTB、UXTH)变体中,并且是适当的位域操作指令。 这些指令的有符号和无符号变体都将字节、半字…

【失业即将到来?】AI时代会带来失业潮吗?

文章目录前言一、全面拥抱AIGC二、AI正在取代这类行业总结前言 兄弟姐妹们啊,AI时代,说抛弃就抛弃,真的要失业了。 一、全面拥抱AIGC 蓝色光标全面暂停外包? 一份文件截图显示,中国知名4A广告公司,蓝色光…

汇编第二次上机实验(续第一次,字符串比较及双重循环)【嵌入式系统】

汇编第二次上机实验(续第一次,字符串比较及双重循环)【嵌入式系统】前言推荐说明汇编第二次上机实验(续第一次,字符串比较及双重循环)内容1 sort说明流程图代码编写结果分析2 string流程图代码编写结果分析…

Nginx的安装、反向代理、负载均衡及部署项目

Nginx 一、Nginx简介 Nginx称为:负载均衡器或 静态资源服务器:html,css,js,img ​ Nginx(发音为“engine X”)是俄罗斯人编写的十分轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。Nginx是由俄罗斯人 Igor Syso…

DOM(上)

DOM(文档对象模型):处理可扩展标记语言(HTML或XML)的标准编程接口,可以改变网页的内容、结构和样式。DOM树: …

大数据项目实战之数据仓库:电商数据仓库系统——第2章 数据仓库建模概述

第2章 数据仓库建模概述 2.1 数据仓库建模的意义 如果把数据看作图书馆里的书,我们希望看到它们在书架上分门别类地放置;如果把数据看作城市的建筑,我们希望城市规划布局合理;如果把数据看作电脑文件和文件夹,我们希…

CMake——从入门到百公里加速6.7s

目录 一、前言 二、HelloWorld 三、CMAKE 界面 3.1 gui正则表达式 3.2 GUI构建 四 关键字 4.1 add_library 4.2 add_subdirectory 4.3 add_executable 4.4 aux_source_directory 4.5 SET设置变量 4.6 INSTALL安装 4.7 ADD_LIBRARY 4.8 SET_TARGET_PROPERTIES 4.9…

[JavaEE]----Spring03

文章目录Spring_day031,AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念2,AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点步骤5:制作切面步骤6:将通知…

测试-子查询及数据更新

测试-子查询及数据更新 目录测试-子查询及数据更新1、修改borrow表增加一列;修改日期数据(两条语句完成)题目代码题解2、 SQL更新:删除-删除“吴宾”的所有成绩记录题目代码3、SQL查询:查询没有被订购的商品题目代码4、…

CMake GUI工具使用 MinGW 64构建工程

系列文章目录 文章目录系列文章目录前言一、open Project是灰色?前言 CMake GUI 打开 CMake GUI。 在 “Where is the source code” 字段中,选择 Krita 源代码目录:E:/krita-dev/krita。 在 “Where to build the binaries” 字段中&#x…

9.Java面向对象----封装

Java面向对象—封装 面向对象简称 OO(Object Oriented),20 世纪 80 年代以后,有了面向对象分析(OOA)、 面向对象设计(OOD)、面向对象程序设计(OOP)等新的系统…