文件操作与IO(上)

news2024/9/21 3:22:00

✨个人主页: 不漫游-CSDN博客

目录

一、认识文件

文件存储

文件路径

绝对路径

相对路径

文件种类

二进制文件

文本文件

文件系统操作

经典面试题


 

一、认识文件

想必文件大家都不陌生,文件是存储在计算机系统中的数据集合,它可以包含文本、图像、音频、视频或其他类型的数据。比如下图

文件存储

这里讨论的文件属于狭义上的文件,一般是存储在硬盘上的。这里别忘了硬盘和内存的区别。

1.硬盘存储空间大,内存小。

2.硬盘速度慢,内存快。

3.硬盘的成本低,内存高。

4.硬盘可以持久化存储,内存断电后数据丢失。

硬盘中最常见的是机械硬盘。有两种读写方式:顺序读写和随机读写。

顺序读写是指数据在存储介质上按连续的物理位置进行读取或写入。
数据在物理位置上是连续的,因此存储设备可以以较高的速度进行读写操作,

随机读写是指数据在存储介质上按不连续的物理位置进行读取或写入,即数据的访问是随机的,没有固定的顺序。因此存储设备需要频繁地移动读写头或寻址,这会导致读写操作的速度显著下降。

文件路径

文件的组织一般都是树形结构,如图~

绝对路径

绝对路径是从文件系统的根目录(或最顶层目录)开始,一直到指定文件或目录的完整路径。也就是平常说的“文件地址”。

D:\Program Files (x86)\Dev-Cpp

 这里要注意:

绝大多数系统都是用/(斜杠)作为目录的分隔符,只有Windows系统/(斜杠)和\(反斜杠)两者兼容。

相对路径

相对路径是相对于当前工作目录(参考系)而言的路径。相对路径不从文件系统的根目录开始,而是从当前工作目录开始。

假设我们有一个文件系统结构如下(树形):


若设置工作目录是 ​/home/user/documents​:

文件report.docx​ 的相对路径是 ​report.docx​。
文件​vacation.jpg​ 的相对路径是 ​photos/vacation.jpg​。


若设置工作目录是 ​/home/user​:

文件​report.docx​ 的相对路径是 ​documents/report.docx​。
文件​vacation.jpg​ 的相对路径是 ​documents/photos/vacation.jpg​。


重新设置工作目录是 ​/home/user/documents/photos​:

文件vacation.jpg​ 的相对路径是 ​vacation.jpg​。
文件​report.docx​ 的相对路径是 ​../report.docx​。

这里解释一下两个点   .. 

​..表示当前目录的上一级目录。即先回到documents目录,再去指向report.docx文件。

文件种类

二进制文件

二进制文件是包含以二进制形式编码的数据的文件,这些数据不是以字符编码表示的,因此不能直接用文本编辑器打开和编辑。不然就会出现乱码的情况。

文本文件

文本文件是包含字符编码数据的文件,这些数据以可读的文本形式表示。

但在速度方面显示是二进制文件更快,毕竟文本文件还要转换成对应的二进制码才可以被机器识别。

文件系统操作

文件系统操作是指在计算机上对文件和目录进行创建、读取、更新和删除(CRUD)等操作的过程,一般是调用File类里面的方法进行操作。

这些方法不用死记硬背,记住一些常用的即可即可,忘记的时候去翻阅下本博客就好了~

package IO;

import java.io.File;
import java.io.IOException;

public class demo1 {
    public static void main(String[] args) throws IOException {
        File file=new File("D:\\测试\\文件1.txt");

        System.out.println(file.getParent());
        System.out.println(file.getName());
        System.out.println(file.getPath());
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalPath());
        System.out.println(file.exists());
        System.out.println(file.isDirectory());//file是否是目录
        System.out.println(file.isFile());//file是否问文件
    }
}

注意:

一般来讲,文件路径都是单反斜杠,但在代码里都要用双反斜杠(\\), 

因为在Java字符串中,反斜杠(\)是一个转义字符,因此需要使用双反斜杠(\\)来表示一个反斜杠.

经典面试题

写一段代码去显示指定目录里面的所有内容(包括子目录以及所有文件)。

假设指定目录是  "D:\测试" ,“测试2”文件夹里面为空。 

之前就有提到过文件是由树形结构组织起来的,那就少不了要用递归

package IO;
import java.io.File;

public class demo2 {
    public static void scan(File file) {
        //1.先判断是不是目录
        if (!file.isDirectory()) {
            return;
        }
        //2.获取目录下的所有文件和子目录
        File[] files = file.listFiles();
        if (files != null && files.length!=0) {
            for (File f : files) {
                //如果是文件,打印当前文件的路径
                System.out.println(f.getAbsolutePath());
                //如果是目录,递归调用scan方法
                if (f.isDirectory()) {
                    scan(f);
                }
            }
        }
    }

    public static void main(String[] args) {
        File file = new File("D:\\测试\\");
        scan(file);
    }
}

可以当成树形结构的遍历,如果是文件则打印直接路径。如果是目录,则递归调用scan方法。

这里要注意,为啥在for循环的过程中,只判断目录即可。

因为在递归遍历目录下的所有文件和子目录时,不再区分文件和目录,而是对每个 ​File​对象都执行相同的操作:打印其绝对路径。

 结果和系统文件一致~

看到最后,如果觉得文章写得还不错,希望可以给我点个小小的赞,您的支持是我更新的最大动力

 

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

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

相关文章

JavaScript基础——JavaScript运算符

赋值运算符 算术运算符 一元运算符 三元/三目运算符 比较运算符 逻辑运算符 运算符优先级 在JavaScript中,常见的运算符可以包括赋值运算符、一元运算符、算术运算符(二元运算符)、三元/三目运算符、比较运算符、逻辑运算符等&#xff0…

centos7安装zabbix

可以联网的centos7系统 关闭防火墙 selinux也关了 1、配置镜像源 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo2、安装nginx并配置 yum ins…

uniapp全局分享功能实现方法(依赖小程序右上角的分享按钮)

1、uniapp开发小程序时默认是关闭分享功能的。点击右上角三个点可查看,效果图如下: 2、在utils文件夹下新建share.js文件,名字任起。(使用的是全局分享,因为一个一个页面的去分享太麻烦且没必要。) export…

万字长文分享快手 Kolors 可图大模型应用实践

导读 在企业提效方面,多模态能力同样具有重要意义。在 AICon 北京站活动中,快手「可图」大模型负责人李岩分享了主题为《快手「可图」文生图大模型应用实践》的演讲,以下为李岩演讲内容~期待对你有所启发! 一、基座模…

docker部署java项目(war包方式)

场景描述:java项目war包,在开发开电脑上使用dockerfile构建镜像,上传镜像到客户服务器中使用docker加载docker镜像,然后部署。 目录 一、本地环境安装 docker git 二、服务器环境安装 docker 三、构建docker镜像(win系统) 四、注意事项 (1)系统架构 (2)使…

线程(Pthread)

目录 多线程模式下cpu如何分配 这两种线程的优缺点 多个线程在进程中共享资源有哪些 非共享资源 线程函数(NPTL API) 线程分离态 线程退出方式 关于线程的能力 线程属性 线程是大多数操作系统支持的调度单位,执行单元,某…

【全国大学生电子设计竞赛】2022年F题

🥰🥰全国大学生电子设计大赛学习资料专栏已开启,限时免费,速速收藏~

RabbitMQ高级特性 - 事务消息

文章目录 RabbitMQ 事务消息概述实现原理代码实现不采用事务采用事务 RabbitMQ 事务消息 概述 RabbitMQ 的 AMQP 协议实现了事务机制,允许开发者保证消息的发送和接收时原子性的,也就是说,要么消息全都发送成功,要么全都发送失败…

《python语言程序设计》2018版第6章第27题双素数是指一堆差值为2的素数。

水平的原因做不到答案那种输出 def is_prime(number):divisor 2while divisor < number / 2:if number % divisor 0:return Falsedivisor 1return Truedef print_prime_numbers(number_of_primes):count 0number 2while number < number_of_primes:if is_prime(numb…

六、GD32 MCU 选项字节设置及解除方法

您在使用GD32过程中是否遇到过芯片反复复位&#xff0c;代码无法更新&#xff0c;代码一直执行在0x1fffxxxx区域&#xff0c;或代码执行在SRAM区域的情况&#xff1f;如果有遇到这类现象是否找到原因呢&#xff1f;如果没找到是否检查过选项字节是否正常呢&#xff1f;这一章节…

C++ | 类和对象(下)(static成员、友元、内部类、匿名对象)

目录 ​编辑 static成员 static性质简介 static属于整个类&#xff0c;属于所有对象 static成员的声明与定义 static函数 友元friend 友元特性简介 友元关系讲解 内部类 特性一 特性二 匿名对象 结语 static成员 static性质简介 static成员在类里面是非常独特的…

ContentProvider的相关知识总结

1.ContentProvider概念讲解&#xff1a; 2.使用系统提供的ContentProvider 其实很多时候我们用到ContentProvider并不是自己暴露自己的数据&#xff0c;更多的时候通过 ContentResolver来读取其他应用的信息&#xff0c;最常用的莫过于读取系统APP&#xff0c;信息&#xff0c…

Kubernetes中的CRI、CNI与CSI:深入理解云原生存储、网络与容器运行时

引言 随着云原生技术的飞速发展&#xff0c;Kubernetes&#xff08;简称K8s&#xff09;作为云原生应用的核心调度平台&#xff0c;其重要性日益凸显。K8s通过开放一系列接口&#xff0c;实现了高度的可扩展性和灵活性&#xff0c;其中CRI&#xff08;Container Runtime Inter…

使用归一化连接计数的胸部CT成像:预测CanCOLD研究中的肺气肿进展| 文献速递-AI辅助的放射影像疾病诊断

Title 题目 CT Chest Imaging Using Normalized Join-Count: Predicting Emphysema Progression in the CanCOLD Study 使用归一化连接计数的胸部CT成像&#xff1a;预测CanCOLD研究中的肺气肿进展 Background 背景 Pre-existing emphysema is recognized as an indicator…

【C++】------继承(一)

目录 前言 一、概念与定义 Ⅰ、是什么&#xff1f; Ⅱ、定义 1.定义格式&#xff1a; 2.继承方式和访问限定符 3.基类&#xff08;父类&#xff09;成员访问方式的变化 二、父类与子类的赋值转化 基本认识 原理 三、 继承中的作用域 四、子类(派生类)的默认成员函…

Spring中是如何实现IoC和DI的?

前言&#xff1a;在前一篇文章中对于IoC的核心思想进行了讲解&#xff0c;而本篇文章则从Spring的角度入手&#xff0c;体会Spring对于IoC是如何实现的。 如果对IoC还有不太了解的可以阅读上一篇文章&#xff0c;相信一定会带来全新的收获&#xff1a;什么是IoC&#xff08;控制…

5.5软件工程-系统测试

系统测试 意义和目的原则测试过程测试策略测试方法练习题 测试用例设计黑盒测试等价类划分边界值分析错误推测因果图 白盒测试逻辑覆盖循环覆盖基本路径测试法 练习题 调试软件度量练习题 考点少&#xff0c;知识点多 意义和目的 系统测试的意义&#xff1a;系统测试是为了发现…

浅谈Redis集群架构与主从架构

目录 1. Redis集群1.1 集群概念1.2 集群分片1.3 重新分片 2. 集群的主从模型2.1 主从模型2.2 主节点选举 1. Redis集群 1.1 集群概念 面试官&#xff1a;我看你简历写了Redis集群&#xff0c;你说一说&#xff1f; Redis主从架构和Redis集群架构是两种不同的概念&#xff0c;大…

【Spring成神之路】从源码角度深度刨析Spring循环依赖

文章目录 一、引言二、循环依赖出现的场景2.1 有参构造导致的循环依赖问题2.2 属性注入出现的依赖问题2.3 Spring IOC创建Bean的流程2.4 有参构造为何失败2.5 属性注入为何能成功2.6 AOP导致的循环依赖 三、Spring循环依赖源码刨析四、Spring循环依赖案例刨析 一、引言 循环依…

【MATLAB源码】数学建模基础教程---初步认识数学建模

系列文章目录在最后面&#xff0c;各位同仁感兴趣可以看看&#xff01; 什么是数学建模 含义1.区分数学模型和数学建模2. 建立数学模型的注意事项3.数学建模流程图解4.数学建模模型分类5.论文常用套路6.最后&#xff1a;总结系列文章目录 含义 所谓数学建模&#xff0c;简言…