JavaEE初阶 - 文件操作和IO(一)

  • 认识文件
  • 树形结构组织 和 目录 (N叉树)
  • 文件路径(Path)
  • 其他知识
  • Java中操作文件
    • File概述
      • 属性
      • 构造方法
      • 方法
      • 代码实例(一)
      • 代码实例(二)
      • 代码实例(三)
      • 代码实例(四)
      • 代码实例(五)

认识文件

我们先来认识狭义上的文件(file)。针对硬盘这种持久化存储的 I/O 设备,当我们想要进行数据保存时,往往不是保存一个整体,而是独立成一个个单位进行保存,这个独立的单位就被抽象成文件的概念,就类似办公桌是上的一份份真实的文件一般。

在这里插入图片描述

文件除了有数据内容之外,还有一部分信息,例如文件名,文件类型,文件大小等并不作为文件的数据而存在,我们把这部分信息可以视为文件的元信息

在这里插入图片描述

树形结构组织 和 目录 (N叉树)

随着文件越来越多,对文件的管理也被提上了日程,如何进行文件的组织呢,一种合乎自然地想法就出现了,就是按照层级结构进行组织 ——也就是我们数据结构中学习过的树形结构。这样,一种专门用来存放管理信息的特殊文件诞生了,也就是我们平时所谓文件夹(folder)或者目录(directory) 的概念

在这里插入图片描述
在这里插入图片描述

文件路径(Path)

如何在文件系统中如何定位我们的一个唯一的文件就成为当前要解决的问题,但这难不倒计算机科学 家 ,因为从树形结构的角度看,树中的每个结点都可以被一条从跟根开始,一直到达的结点的路径所描述的,而这种描述方式就被称为文件的绝对路径(absolute path)。

在这里插入图片描述

除了可以从根节点进行路径的描述,我们可以从任意结点出发,进行路径的描述,而这种描述方式就被称为相对路径(relative path),相对于当前所在结点的一条路径。

在这里插入图片描述

其他知识

即使是普通⽂件 ,根据其保存数据的不同 ,也经常被分为不同的类型 ,我们⼀般简单的划分为文本文件和⼆进制⽂件 ,分别指代保存被字符集编码的⽂本和按照标准格式保存的非被字符集编码过的文件。

在这里插入图片描述

Windows 操作系统上 ,会按照文件名中的后缀来确定⽂件类型以及该类型文件的默认打开程序。但这个习俗并不是通⽤的 ,在 OSX、 Unix、 Linux 等操作系统上 ,就没有这样的习惯 ,⼀般不对文件类型做如此精确地分类。

在这里插入图片描述

文件由于被操作系统进⾏了管理 ,所以根据不同的⽤户 ,会赋予用户不同的对待该⽂件的权限 ,⼀般 地可以认为有可读、可写、可执行权限。

在这里插入图片描述

Windows 操作系统上 ,还有⼀类⽂件⽐较特殊 ,就是平时我们看到的快捷⽅式(shortcut),这种⽂ 件只是对真实⽂件的⼀种引⽤⽽已。其他操作系统上也有类似的概念 ,例如 ,软链接(soft link)等。

在这里插入图片描述

很多操作系统为了实现接⼝的统⼀性 ,将所有的 I/O 设备都抽象成了文件的概念 ,使⽤这⼀理念最为知名的就是 Unix、 Linux 操作系统 ⸺ 万物皆文件。

Java中操作文件

Java 中通过 java.io.file 类来对⼀个⽂件(包括目录) 进⾏抽象的描述。注意 ,有 File 对象,并不代表真实存在该⽂件。

File概述

先来看看 File 类中的常见属性、构造方法和方法

属性

修饰符及类型属性说明
statiic StringpathSepatator依赖于系统的路径分隔符 ,String 类型的表示
static charpathSeparatorChar依赖于系统的路径分隔符 ,char 类型的表示
public static final String pathSeparator
与系统相关的路径分隔符,为方便起见,表示为字符串。 该字符串包含单个字符,即pathSeparatorChar。源码如下:
public static final String pathSeparator = "" + pathSeparatorChar;public static final char pathSeparatorChar
与系统相关的路径分隔符。 此字段初始化为包含系统属性值path.separator的第一个字符。 
此字符用于分隔作为路径列表给出的文件序列中的文件名。 在UNIX系统上,此字符为':' ;Microsoft Windows系统上,它是';' 。
另请参见:
System.getProperty(java.lang.String)源码如下:
public static final char pathSeparatorChar = fs.getPathSeparator();

构造方法

签名说明
File(File parent, String child)根据⽗⽬录 + 孩⼦⽂件路径 ,创建⼀个新的 File 实例
File(String pathname)根据⽂件路径创建⼀个新的 File 实例 ,路径可以是绝 对路径或者相对路径
File(String parent, String child)根据⽗⽬录 + 孩⼦⽂件路径 ,创建⼀个新的 File 实 例 ,⽗⽬录⽤路径表⽰

方法

修饰符及返回值类型⽅法签名说明
StringgetParent()返回 File 对象的⽗⽬录⽂件路径
StringgetName()返回 File 对象的纯⽂件名称
StringgetPath()返回 File 对象的⽂件路径
StringgetAbsolutePath()返回 File 对象的绝对路径
StringgetCanonicalPath()返回 File 对象的修饰过的绝对路径
booleanexists()判断 File 对象描述的⽂件是否真实 存在
booleanisDirectory()判断 File 对象代表的⽂件是否是⼀个目录
booleanisFile()判断 File 对象代表的⽂件是否是⼀ 个普通⽂件
booleancreateNewFile()根据 File 对象 ,⾃动创建⼀个空⽂件。成功创建后返回true
booleandelete()根据 File 对象 ,删除该⽂件。成功删除后返回true
voiddeleteOnExit()根据 File 对象 ,标注⽂件将被删除 ,删除动作会到JVM 运⾏结束时才会进⾏
String[]list()返回 File 对象代表的⽬录下的所有 文件名
File[]listFiles()返回 File 对象代表的⽬录下的所有 ⽂件 ,以 File 对象表⽰
booleanmkdir()创建 File 对象代表的⽬录
booleanmkdirs()创建 File 对象代表的⽬录 ,如果必要 ,会创建中间⽬录
booleanrenameTo(Filedest)进⾏⽂件改名 ,也可以视为我们平 时的剪切、粘贴操作
booleancanRead()判断⽤⼾是否对⽂件有可读权限
booleancanWrite()判断⽤⼾是否对⽂件有可写权限

代码实例(一)

观察 get 系列的特点和差异

package io;import java.io.File;
import java.io.IOException;public class Demo1 {public static void main(String[] args) throws IOException {File f = new File("./test.txt");//并不要求该⽂件真实存在System.out.println(f.getParent());//返回 File 对象的⽗⽬录⽂件路径System.out.println(f.getName());//返回 File 对象的纯⽂件名称System.out.println(f.getPath());//返回 File 对象的⽂件路径System.out.println(f.getAbsolutePath());//返回 File 对象的绝对路径System.out.println(f.getCanonicalPath());//返回 File 对象的修饰过的绝对路径}
}

在这里插入图片描述

代码实例(二)

普通⽂件的创建、删除

package io;import java.io.File;
import java.io.IOException;public class Demo2 {public static void main(String[] args) throws IOException {File f = new File("./test.txt");//创建文件f.createNewFile();//判断 File 对象描述的⽂件是否真实存在System.out.println(f.exists());//判断 File 对象代表的⽂件是否是⼀个普通⽂件System.out.println(f.isFile());//判断 File 对象代表的⽂件是否是⼀个目录System.out.println(f.isDirectory());}
}

在这里插入图片描述

代码实例(三)

观察 deleteOnExit 的现象

import java.io.File;
import java.io.IOException;public class Demo3{
public static void main(String[] args) throws IOException {File file = new File("some-file.txt");        // 要求该⽂件不存在,才能看到System.out.println(file.exists());System.out.println(file.createNewFile());System.out.println(file.exists());file.deleteOnExit();System.out.println(file.exists());}
}

在这里插入图片描述
程序运⾏结束后 ,⽂件还是被删除了

代码实例(四)

观察⽬录的创建

package io;import java.io.File;public class Demo4 {public static void main(String[] args) {File dir = new File("./testDir");// dir.mkdirs();  可以创建多级目录dir.mkdir();System.out.println(dir.isDirectory());}
}

代码实例(五)

观察⽂件重命名

package io;import java.io.File;//文件重命名
public class Demo5 {public static void main(String[] args) {File f1 = new File("./test.txt");File f2 = new File("./test2.txt");System.out.println(f1.renameTo(f2));}
}

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

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

相关文章

Redis三种常用的缓存读写策略

Cache Aside Pattern(旁路缓存模式) 现在基本都用这个模式 Cache Aside Pattern 中服务端需要同时维系 db 和 cache,并且是以 db 的结果为准。 读写步骤: 写: 先更新 db,然后直接删除 cache 。 读 : …

电脑系统重装数据被格式化,那些文件还有办法恢复吗?

在日常使用电脑的过程中,系统重装或格式化操作是常见的维护手段,尤其是在遇到系统崩溃、病毒感染或需要升级系统时。然而,这一操作往往伴随着数据丢失的风险,尤其是当C盘(系统盘)和D盘(或其他数…

LabVIEW鼠标悬停在波形图上的曲线来自动显示相应点的坐标

步骤 创建事件结构: 打开LabVIEW,创建一个新的VI。 在前面板上添加一个Waveform Graph控件。 在后面板上添加一个While Loop和一个事件结构(Event Structure)。 配置事件结构,选择Waveform Graph作为事件源&#xf…

【作业】 贪心算法1

Tips:三题尚未完成。 #include <iostream> #include <algorithm> using namespace std; int a[110]; int main(){int n,r,sum0;cin>>n>>r;for(int i0;i<n;i){cin>>a[i];}sort(a0,an);for(int i0;i<n;i){if(i>r){a[i]a[i-r]a[i];}suma[…

ActiveMQ配置延迟投递和定时投递教程

配置activemq.xml中的<broker>标签添加schedulerSupport"true" schedulerSupport"true"更改完成重启生效 四大属性解释 Property nametypedescriptionAMQ_SCHEDULED_DELAYlong延迟投递的时间AMQ_SCHEDULED_PERIODlong重复投递的时间间隔AMQ_SCHEDU…

动手学深度学习——5.卷积神经网络

1.卷积神经网络特征 现在&#xff0c;我们将上述想法总结一下&#xff0c;从而帮助我们设计适合于计算机视觉的神经网络架构。 平移不变性&#xff08;translation invariance&#xff09;&#xff1a;不管检测对象出现在图像中的哪个位置&#xff0c;神经网络的前面几层应该对…

阿里云国际站:海外视频安全的DRM加密

随着科技的进步&#xff0c;视频以直播或录播的形式陆续开展海外市场&#xff0c;从而也衍生出内容安全的问题&#xff0c;阿里云在这方面提供了完善的内容安全保护机制&#xff0c;适用于不同的场景&#xff0c;如在视频安全提供DRM加密。 由图可以了解到阿里云保护直播安全的…

吴恩达大模型系列课程《Prompt Compression and Query Optimization》中文学习打开方式

Prompt Compression and Query Optimization GPT-4o详细中文注释的Colab观看视频1 浏览器下载插件2 打开官方视频 GPT-4o详细中文注释的Colab 中文注释链接&#xff1a;https://github.com/Czi24/Awesome-MLLM-LLM-Colab/tree/master/Courses/Prompt-Compression-and-Query-Op…

鼠标录制工具怎么挑选?9款电脑鼠标录制工具分享(2024)

你知道鼠标录制工具吗&#xff1f;鼠标录制工具通过记录和回放用户的操作&#xff0c;帮助自动化重复性任务&#xff0c;提高工作效率和精确性。它可以帮助用户简化很多繁琐的操作步骤&#xff0c;非常适合运用在电脑自动化任务、游戏自动化中&#xff0c;给大家整理了2024年9款…

【学习笔记】einsum(爱因斯坦求和)

文章目录 einsum&#xff08;爱因斯坦求和&#xff09;基本语法对角线操作矩阵乘法向量点积张量积 总结 einsum&#xff08;爱因斯坦求和&#xff09; einsum 是 Python 中 NumPy 库的一个函数&#xff0c;它提供了一种非常灵活的方式来进行多维数组的对角线操作、矩阵乘法、向…

【芯片设计- RTL 数字逻辑设计入门 番外篇 12 -- SoC 设计中的 ECO】

请阅读【ARM AMBA AXI 总线 文章专栏导读】 请阅读【芯片设计 RTL 数字逻辑设计扫盲 】 转自&#xff1a;简单了解SoC设计中的ECO — 快乐的芯片工程师 文章目录 ECO 概述Pre-Mask ECO&#xff08;预掩模ECO&#xff09;芯片设计前端与后端的区别 Post-Mask ECO&#xff08;后…

Linux+InternStudio 关卡(test)

任务地址&#xff1a; https://github.com/InternLM/Tutorial/blob/camp3/docs/L0/Linux/task.md 文档 https://github.com/InternLM/Tutorial/blob/camp3/docs/L0/Linux/readme.md 任务 ssh连接 端口映射 gradio页面 笔记&#xff1a; 1.端口映射阶段&#xff1a;输入密…

[经验] 陏唐英雄之薜刚反唐 #知识分享#其他#媒体

陏唐英雄之薜刚反唐 1、陏 陏是一种古代汉字&#xff0c;它的拼音为du&#xff0c;意思是田地里的小路。这个字的形状非常特殊&#xff0c;由一个“阝”字部和一个“多”字部组成。在古代&#xff0c;人们用来描述田地中间的窄路或是用来分隔不同农田之间的小路。陏这个字在日…

[python]pycharm设置清华源

国内镜像源有以下几个&#xff0c;因为都是国内的&#xff0c;基本速度差不了太多。 清华&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple 阿里云&#xff1a;http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣&…

uni-app:文字竖直排列,并且在父级view中水平竖直对齐

一、效果 二、代码 <template><view class"parent"><text class"child">这是竖直排列的文字</text></view> </template> <script>export default {data() {return {}},methods: {},}; </script> <sty…

Apache Flink 入门

零、概述 Apache Flink 是一个高性能的开源分布式流处理框架&#xff0c;专注于实时数据流的处理。 它设计用于处理无界和有界数据流&#xff0c;在内存级速度下提供高效的有状态计算。 Flink 凭借其独特的Checkpoint机制和Exactly-Once语义&#xff0c;确保数据处理的准确性…

首个WebAgent在线评测框架和流程数据管理平台来了,GPT-4、Qwen登顶闭源和开源榜首!

在当今科技迅速发展的时代&#xff0c;大型语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;正以前所未有的速度改变着我们与数字世界的互动方式。基于LLM的智能代理&#xff08;LLM Agent&#xff09;&#xff0c;从简单的信息搜索到复杂的网页操作&…

couldn‘t read native报错!Typora中使用Pandoc导出Word失败的解决方法

couldn‘t read native报错&#xff01;Typora中使用Pandoc导出Word失败的解决方法 一、问题描述 在Typora中使用Pandoc将markdown文件导出为word文件时&#xff0c;发生如下图所示错误: 在网上找了资料以后&#xff0c;发现是因为md文件里面有表格&#xff0c;如果把表格删掉…

【Harmony】SCU暑期实训鸿蒙开发学习日记Day2

目录 Git 参考文章 常用操作 ArkTS的网络编程 Http编程 发送请求 GET POST 处理响应 JSON数据解析 处理响应头 错误处理 Web组件 用生命周期钩子实现登录验证功能 思路 代码示例 解读 纯记录学习日记&#xff0c;杂乱&#xff0c;误点的师傅可以掉了&#x1…

网络和安全操作

一、网络的介绍 1.编辑文件 文本编辑器有很多&#xff0c;比如图形模式的gedit、OpenOffice 等&#xff0c;文本模式下的编辑器有vi、vim&#xff08;vi的增强版本&#xff09;等。vi和vim是我们在Linux中最常用的编辑器。 gedit&#xff1a;类似于windows下的记事本&#xf…