济南网站公司哪家好,营销型企业网站有哪些类型,网站怎么做参考文献,广州建设职业培训学校目录 一、文件的基本知识1.1 文件的基本概念#xff1a;1.2 树型结构组织和目录#xff1a;1.3 文件路径#xff08;Path#xff09;#xff1a;1.4 二进制文件 VS 文本文件#xff1a;1.5 其它#xff1a; 二、Java 操作文件2.1 方法说明#xff1a;2.2 使用演示… 目录 一、文件的基本知识1.1 文件的基本概念1.2 树型结构组织和目录1.3 文件路径Path1.4 二进制文件 VS 文本文件1.5 其它 二、Java 操作文件2.1 方法说明2.2 使用演示 一、文件的基本知识
1.1 文件的基本概念 我们先来认识狭义上的文件file。针对硬盘这种持久化存储的 I/O 设备当我们想要进行数据保存时往往不是保存成一个整体而是独立成一个个的单位进行保存这个独立的单位就被抽象成文件的概念就类似办公桌上的⼀份份真实的文件一般。 文件除了有数据内容之外还有一部分信息例如文件名、文件类型、文件大小等并不作为文件的数据而在我们把这部分信息可以视为文件的元信息。 1.2 树型结构组织和目录 同时随着文件越来越多对文件的系统管理也被提上了日程如何进行文件的组织呢一种合乎自然的想法出现了就是按照层级结构进行组织也就是我们数据结构中学习过的树形结构。这样一种专门用来存放管理信息的特殊文件诞生了也就是我们平时所谓文件夹folder或者目录directory的概念。 1.3 文件路径Path
如何在文件系统中如何定位我们的⼀个唯一的文件就成为当前要解决的问题但这难不倒计算机科学家因为从树型结构的角度来看树中的每个结点都可以被一条从根开始一直到达结点的路径所描述而这种描述方式就被称为文件的绝对路径absolute path。
在 windows 上以盘符为开头的路径称为 “绝对路径”。 除了可以从根开始进行路径的描述我们可以从任意结点出发进行路径的描述而这种描述方式就被称为相对路径relative path相对于当前所在结点的一条路径。 注意目录和目录之间使用 /正斜杠 或者 \反斜杠 进行分隔但是这个事情只是局限在 windows 上。而 Linux MacIOSAndroid 都是按照 / 来进行表示的不支持 \ 的方式。因此在日常开发中推荐大家使用 / 而不是 \ 。这样写还有一个好处 \ 在字符串常量中就会涉及到转义字符的概念这样 \ 两个才能表示一个 \ 这样太麻烦了。
给大家举个打开 QQ 的栗子
绝对路径D:/program/qq.exe
相对路径./qq.exe
在相对路径中 ’ . 表示当前所在的位置。如果需要返回上一级目录可以通过 …/ 来进行返回。
1.4 二进制文件 VS 文本文件
即使是普通文件根据其保存数据的不同也经常被分为不同的类型我们一般简单的划分为文本文件和二进制文件分别指代保存被字符集编码的文本和按照标准格式保存的非被字符集编码过的文件。
如何区分二进制文件和文本文件呢
一个简单粗暴的有效方法使用记事本打开看看如果不是乱码就是文本文件如果是乱码就是二进制文件。文本文件是给人看的二进制文件是给程序看的 下图就是一个二进制文件用记事本打开的情况乱码。 1.5 其它 Windows 操作系统上会按照文件名中的后缀来确定文件类型以及该类型文件的默认打开程序。但这个习俗并不是通用的在 OSX、Unix、Linux 等操作系统上就没有这样的习惯一般不对文件类型做如此精确地分类。 文件由于被操作系统进行了管理所以根据不同的用户会赋予用户不同的对待该文件的权限⼀般地可以认为有可读、可写、可执行权限。 Windows 操作系统上还有一类文件比较特殊就是平时我们看到的快捷方式shortcut这种文件只是对真实文件的一种引用而已。其他操作系统上也有类似的概念例如软链接(softlink)等。 最后很多操作系统为了实现接口的统一性将所有的 I/O 设备都抽象成了文件的概念使用这一理念最为知名的就是 Unix、Linux 操作系统万物皆文件。
二、Java 操作文件
在本节内容中我们主要涉及文件的元信息、路径的操作暂时不涉及关于文件中内容的读写操作。这里主要涉及到的类为 File 类。
2.1 方法说明
属性
修饰符及类型属性说明static StringpathSeparator依赖于系统的路径分隔符String 类型的表示。static charpathSeparator依赖于系统的路径分隔符char类型的表示。
Java 为了能够跨平台专门提供的变量如果是 windows 版本的 JDK 就是 \如果是 Linux / mac 版本的就是 /。但是其实这个东西没啥用我们统一使用 / 即可支持不同系统。
构造方法
方法名说明File(File parentString child)根据父目录 孩子文件路径创建一个新的 File 实例。File(String pathname)根据文件路径创建⼀个新的 File 实例路径可以是绝对路径或者相对路径。File(String parent, String child)根据父目录 孩子文件路径创建⼀个新的 File 实例父目录用路径表示。
我们最常使用的是第二个构造方法字符串类型的路径绝对路径 / 相对路径都是可以的。注意相对路径如果没有特定设置在 idea 上可以设置默认是从 Java 文件所在位置开始。
普通方法
返回值方法名说明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(File dest)进行文件改名也可以视为我们平时的剪切、粘贴操作。booleancanRead()判断用户是否对文件有可读权限。booleancanWrite()判断用户是否对文件有可写权限。
如上就是我们 File 类的一些常用方法虽然很多但是基本都要掌握。
2.2 使用演示
示例1观察 get 系列的特点和差异。
代码如下
import java.io.*;
public class boke1 {public static void main(String[] args) throws IOException {File file new File(./text.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());}
}示例运行结果为 这里主要看 getAbsolutePath 和 getCanonicalPath 的区别。区别在于 getCanonicalPath 会对不必要的符号进行删除。 示例2普通文件的创建、删除。
代码如下
import java.io.File;
import java.io.IOException;
public class demo2 {public static void main(String[] args) throws IOException {File file new File(text.txt); //刚开始文件不存在//判断文件 | 目录是否存在System.out.println(file.exists());System.out.println(file.isDirectory());System.out.println(file.isFile());System.out.println(---------------------------);//创建文件System.out.println(file.createNewFile());System.out.println(---------------------------);//判断文件 | 目录是否存在System.out.println(file.exists());System.out.println(file.isDirectory());System.out.println(file.isFile());System.out.println(---------------------------);//判断在文件已经存在的情况下是否能够创建成功。System.out.println(file.createNewFile());System.out.println(---------------------------);//进行文件删除System.out.println(file.delete());System.out.println(---------------------------);//判断文件 | 目录是否存在System.out.println(file.exists());System.out.println(file.isDirectory());System.out.println(file.isFile());System.out.println(---------------------------);}
}示例演示效果如下 示例3观察目录的创建。
删除和上面普通文件的删除是一样的这里就不再赘述。
代码如下
import java.io.File;
import java.io.IOException;
public class demo3 {public static void main(String[] args) throws IOException {File dir new File(dir); // 刚开始目录不存在System.out.println(dir.isDirectory());System.out.println(dir.isFile());System.out.println(------------------------);System.out.println(dir.mkdir());System.out.println(------------------------);System.out.println(dir.isDirectory());System.out.println(dir.isFile());}
}示例演示效果如下 创建普通文件或者创建目录在 IDEA 上我们都是看的见的。将我们上述的代码执行后IDEA 页面会出现对应的文件或者目录示例2之所以没有是因为我们最后将其删除了。如下图
示例4多级目录的创建。
mkdir() 的时候如果中间目录不存在则无法创建成功。mkdirs() 可以解决这个问题。
代码如下
import java.io.File;
import java.io.IOException;
public class demo4 {public static void main(String[] args) throws IOException {File dir new File(parent/aaa/bbb/ccc);//这里的 parent 和 aaa bbb ccc 都不存在System.out.println(dir.isDirectory());System.out.println(dir.isFile());System.out.println(----------------------------);System.out.println(dir.mkdir());System.out.println(----------------------------);System.out.println(dir.mkdirs());System.out.println(----------------------------);System.out.println(dir.isDirectory());System.out.println(dir.isFile());}
}示例演示如下 IDEA 上对应的变化如下图 示例5文件重命名
注意renameTo 是剪切、粘贴不是复制、粘贴。
代码如下
注意要保证 file 是存在的dest 是不存在的。下面这段代码才能正确运行。
import java.io.File;
import java.io.IOException;
public class demo5 {public static void main(String[] args) throws IOException {File file new File(text.txt); // 要求 some-file.txt 得存在File dest new File(dest.txt); // 要求 dest.txt 不存在System.out.println(file.exists());System.out.println(dest.exists());System.out.println(-------------------------);System.out.println(file.renameTo(dest));System.out.println(-------------------------);System.out.println(file.exists());System.out.println(dest.exists());}
}代码的运行结果如下 结语 其实写博客不仅仅是为了教大家同时这也有利于我巩固知识点和做一个学习的总结由于作者水平有限对文章有任何问题还请指出非常感谢。如果大家有所收获的话还请不要吝啬你们的点赞收藏和关注这可以激励我写出更加优秀的文章。