趣文网 > 作文大全

「JAVA」属性 路径分隔符有何不同?file对象创建 文件过滤器

2020-12-02 04:15:01
相关推荐

Java IO

作为一个开发者来说,文件的输入/输出是个必须要面对的问题,更是个必须要攻克的难题。因为不仅有各种I/O端和接收端,还要与之通信(按顺序读写,随机读写、按行、按字符、按字节);不仅有本地I/O,还有缓冲、网络。

Java 作为一门高级程序设计语言,当然也会提供对各种I/O读写、通信的支持。从Java 1.0开始,便提供了大量的I/O支持;至今为止,Java I/O经历了几个版本的沉淀,已经有了很成熟的I/O通信技术。让我们来一起看看Java I/O的成长历程:

01

属性分隔符、路径分隔符

属性分隔符,用于分隔连续多个路径字符串的分隔符,比如:

java -cp test.jar;abc.jar HelloWorld在上述路径字符串中,属性分隔符是“;”;

路径分隔符

相邻层级目录间或目录与文件间的分隔符,在Unix系系统中,文件路径分隔符用“/”表示;在Windows系统中,文件路径分隔符用“”表示,比如:

C:Javabinjava.exe在上述路径中,路径分隔符是“”;

不同的操作系统会使用不同的文件路径,不同的文件路径中会使用不同的路径分隔符,也会有不同的属性分隔符,比如:

Unix:严格区分大小写,使用“/”来分隔目录路径,使用“:”来分割属性;WIndows:默认不区分大小写,使用“”来分隔目录路径,使用“;”来分割属性;但是在Java中一个””表示转义,所以在Windows平台的Java代码中表示一个路径就得使用两个“”,即:“”;但同时,Windows系统也是支持”/“作为路径分隔符的。所以在windows系统中,路径就可以有两种表示法:

使用“”:C:Javaconfig.txt;使用“/”:C:/Java/config.txt;两种路径表示法都是可以的,但由于转义,在开发中更多使用的是后一种。

Java 中的路径分隔符

因为我们的项目开发环境和运行环境不一定都是相同的,而不同的环境(操作系统)会使用不同的路径表示法,如果项目是在windows环境下开发的,项目中文件路径使用的是windows下的路径,那么,项目就无法在Linux环境中运行。

还有很重要的一点:Java 是跨平台的,代码一次编写,就能在不同的平台运行;项目中存在这样的问题,显然并不符合这一理念,而且项目可移植性就会很差,不利于后期维护。

为解决这个问题,Java 在java.io.File类中提供了两类常量,分别来表示路径分隔符和属性分隔符,官方源码如下所示:

java.io.File类 中的路径分隔符和属性

属性分隔符、路径分隔符api

属性分隔符、路径分隔符api

使用案例:

属性分隔符、路径分隔符api 案例

输出结果如下:

属性分隔符、路径分隔符api 案例结果

所以便有了一种新的路径表示法,使用File.separator配合StringBuilder完成文件路径拼接:

文件

02

创建File对象

Java的I/O操作和通信的相关类和接口位于java.io包中,包中有提供大量的I/O操作的api,但这一切的基础是File类,File 这个名字既可以表示一个特定的文件,也可以表示一个目录(目录下有多个文件)。

FilePath(文件路径) 对这个类来说是个更好的名字。——《Java 编程思想》第四版,第525页。

File类是在I/O包中既可以表示磁盘文件,又可以表示磁盘目录的对象的路径。该类包含了创建文件、删除文件、重命名文件,判断文件读写权限、判断文件是否存在等功能方法;但需要注意的是File类中的api只能设置和获取文件本身的信息(名称、文件大小、文件类型),不能设置和获取文件的内容。

创建File对象及其相关操作,这里以“C:/Java/config.txt”为例

1.File(String pathname);,demo如下所示:

File(String pathname);

2.File(String parent, String child);,demo如下:

File(String parent, String child);

3.File(File parent, String child);,demo如下:

File(File parent, String child);

4.File(URI uri);,demo如下:

File(URI uri);

03

File对象的常用操作

获取file路径的操作:

获取file路径的操作

获取file对象的状态:

获取file对象的状态

file对象中的文件操作:

file对象中的文件操作

file对象中的目录操作:

file对象中的目录操作

上述列举出了很多的文件操作的api,可能不太好理解,会很抽象;单看这些api,没有实际案例,也不容易记住,过了就忘了。接下来我们通过一个案例来实际验证上述这些api的使用:

案例1:列出某个目录(包括其子目录)下的所有文件。

案例分析:因为目录可能还有子目录,而子目录下可能还有更多子目录,目录的层级对于我们来说是一个未知数;因此,使用传统的获取固定层级的方法来获取文件,显然不能满足需求;因此,不得不另寻它法,其中,使用递归算法就是一个不错的办法。

代码实现如下:

使用递归列出某个目录下的文件以及目录

递归方法调用

案例2:批量修改文件名称。

批量修改文件名称

04

文件过滤器

文件过滤

文件过滤器的存在,能够很好的筛选出我们想要的文件;在Java中提供了java.io.FileFilter和java.io.FilenameFilter两个文件过滤器,其中FilenameFilter过滤器值针对文件名称提供过滤的,返回的也是文件的名称,而java.io.FileFilter返回的文件的完整信息。

java.io.FileFilter和java.io.FilenameFilter都是接口,在这两个接口中都只提供了一个方法accept();。但是两个方法又略有不同。

在java.io.FileFilter中:

java.io.FileFilter

在java.io.FilenameFilter中:

java.io.FilenameFilter

在下面的案例中,会以java.io.FilenameFilter为例。

案例:筛选出“E:/res”目录下的mp4文件;

方式一:新建筛选器类,实现FilenameFilter接口;

实现FilenameFilter接口 实现文件过滤

方式二:使用匿名内部类

使用匿名内部类 实现文件过滤器

完结。老夫虽不正经,但老夫一身的才华

阅读剩余内容
网友评论
相关内容
延伸阅读
小编推荐

大家都在看

团结合作作文 她笑了作文 我的旅行英语作文 我的外公作文 逛公园作文 一日游作文300字 春节的英文作文 小学满分作文 站立作文 关于细节的作文 奋斗作文800字 关于北京的作文 新年300字作文 爱国情怀的作文 开学了的作文 幸福作文300字 关于担当的作文 关于偶像的作文 记事作文怎么写 写父爱的作文 新年的愿望作文 写人的作文500 世界文化遗产作文 六上英语作文 遇见作文400字 高考英语作文题目 春天作文100字 写小兔子的作文 多肉植物作文 微笑作文500字