Java IO篇 - Java文件操作 之 File (中)

序言:

​ 上一篇我们介绍了,File 描述相对路径和绝对路径的相关知识,并重点讲解了getAbsolutePath() 和 getCanonicalPath()两个方法的用法和区别;

​ 这一篇,我们重点介绍,File类 一些常用的 属性和方法;

一、属性

Modifier and Type属性描述
static StringpathSeparator与系统相关的路径分隔符字符,为方便起见,表示为字符串。
static Stringseparator与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。

首先 我们来比较一下, 下面两个属性的不同点:

​ pathSeparator 属性 代表 ; 分隔符

​ separator 属性 代表 / (微软 使用的 路径 分隔符 为 \ )

 System.out.println("pathSeparator 属性表示的分隔符为     "+File.pathSeparator);

 System.out.println("separator 属性表示的分隔符为     "+File.separator);

结果:

pathSeparator 属性表示的分隔符为     ;
separator 属性表示的分隔符为     \

这里 重点说明一下 separator 属性:因为在不同的操作系统环境下(其实就是微软和其他),所代表的分隔符 是有差异的;

引用知乎用户的解释:

知乎用户:“在绝大多数地方,用的都是/(slash),包括Mac/Linux,也包括URL。你唯一需要记住的是,Microsoft这个怪鸡在自己的操作系统里面偏要用\(backslash),使得自己与众不同。

根据上面的说法,你很容易记住谁是“正”斜杠,谁是“反”斜杠,这个世界上就只有Microsoft是反的,别人都是“正”的,因为它用的那个叫做 backslash。

Linux使用斜杠/作为路径分隔符,而Web应用最先是使用在Linux系统上面,所以目前所有的网络地址都采用斜杠/作为分隔符。

Window 则使用的是 \ 作为路径分隔符:

[外链图片转存失败,源站可能有防在这里插入图片描述盗链机制,建议将图片保存下来直接上传(img-KOdru1oB-1592989674966)(img\file\path3.png)]

有没有发现,\ 在编程语言中 有特定的含义 - 叫做 转义字符;

所以 上图的路径 ,我们在程序中,有时也可以 这样表示

  c:\\ServYou\\APP

二 、方法

假设我们有一个业务场景 :

①、 首先我们需要查看 文件存储设备的空间,是否满足我们存储的条件;

②、如果满足条件,那么 我们需要 判断,该抽象路径所表示的真实路径,是否有这个文件;

③、 存在两种情况:

  • 如果有,查看该文件的权限;并返回该文件的类型;
  • 如果没有 ,则创建 一个空白文件;

④、最后我们删除该文件;

根据这个业务场景,我们开始学习 解决这些问题的方法;

1、查看存储设备空间的相关方法:

修饰符和返回类型Method and Description
longgetFreeSpace( ) :返回分区未分配的字节数
longgetTotalSpace():通过此抽象路径名返回分区大小
longgetUsableSpace():返回分区上的提供给该虚拟机的字节数

这里说明一下 ,我代码的工作空间是存放在 E 盘下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QAQdTs4i-1592989674968)(img\file\fileMethod01.png)]

E盘的存储状态:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zWzMCqLX-1592989674970)(img\file\fileMethod2.png)]

那么 getFreeSpace()方法返回的就是 E 盘未使用的 空闲空间信息,单位为字节;

File file = new File("src\\newfile.txt");
System.out.println("FreeSpace 为 :"+file.getFreeSpace()/1024/1024/1024+"G");

执行的结果:

FreeSpace 为 :274G

getTotalSpace() 方法返回 E盘的所有空间信息(包括已使用的和未使用的),单位为字节;

File file = new File("src\\newfile.txt");
System.out.println("TotalSpace 为 :"+file.getTotalSpace()/1024/1024/1024+"G");

执行的结果:

TotalSpace 为 :316

getUsableSpace() 返回该虚拟机在此抽象名称所命名的分区上可用的空间信息(当前虚拟机使用的是E 盘空间),单位为字节

File file = new File("src\\newfile.txt");
System.out.println("UsableSpace为 :"+file.getUsableSpace()/1024/1024/1024+"G");

执行结果:

UsableSpace 为 :274G

对比一下 getFreeSpace 和 getUsableSpace 方法,虽然结果相同,但是 代表的逻辑不同:

java.io.File.getFreeSpace()方法返回此抽象路径名所命名的分区中未分配的字节数。返回的未分配字节数不保证。在此调用之后,未分配的字节数很可能是准确的,并且任何外部I / O操作都不准确。

java.io.File.getUsableSpace()方法返回该虚拟机在此抽象名称所命名的分区上可用的字节数。当此方法检查写入权限和其他操作系统限制时,通常可以更准确地估计实际可以写入多少新数据。


总结一下:

​ getFreeSpace 表示存储设备 未使用的总空间,不会 检查 写入权限,当有其他的进程正在使用空间时,很有可能 计算的空闲空间信息不是特别准确;

	   getUsableSpace 表示虚拟机分配可使用的空闲空间,会检查写入权限,预估的空闲空间较为准确;

2、判断 抽象路径 所表示的 物理路径上的文件是否存在

修饰符和类型方法和描述
booleanexists() 测试此抽象路径名表示的文件或目录是否存在。

这个没啥好说的 ,就是判断 实际路径上是否存在该文件;

 
        File file = new File("src/fileInputStream.txt");
        if (file.exists()) {
            log.info("在相对 src 路径下存在 一个fileInputStream.txt 文件~~  ");

        } else {

            log.info("在相对 src 路径下不存在该文件~~  ");
        }

3、判断文件权限和文件类型的方法

修饰符和类型方法和描述
booleancanExecute()测试应用程序是否可以执行此抽象路径名表示的文件。
booleancanRead()测试应用程序是否可以读取由此抽象路径名表示的文件。
booleancanWrite()测试应用程序是否可以修改由此抽象路径名表示的文件。
booleanisDirectory()测试此抽象路径名表示的文件是否为目录。
booleanisFile()测试此抽象路径名表示的文件是否为普通文件。

首先我将 fileInputStream.txt 文件的权限设置为只读;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h1zAig6p-1592989674972)(img\file\fileMethod3.png)]

直接上列子:

①、权限信息

  @Test
    public  void  testFilePermission(){

        File file = new File("src/fileInputStream.txt");
        System.out.println("读状态:"+file.canRead());
        System.out.println("写状态:"+file.canWrite());
        System.out.println("执行状态:"+file.canExecute());

    }

执行结果:

读状态:    true
写状态:   	false
执行状态:  true

②、文件类型的判断

        File file = new File("src\\newfile.txt");
        System.out.println("判断是否是一个 文件类型:"+file.isFile());
        System.out.println("判断是否是一个 文件夹类型:"+file.isDirectory());

执行结果:

判断是否是一个 文件类型:true
判断是否是一个 文件夹类型:false

③、创建一个空白文件或者文件夹的方法


//创建一个空白文件
File file = new File("src\\newfile.txt");
  file.createNewFile();
    
//创建一个空目录,前提是 src目录必须存在
File file = new File("src\\abc");
  file.mkdir();
//递归创建目录,在这个例子中,abc和bcd为空目录
File file = new File("src\\abc\\bcd");
  file.mkdirs();

4、删除文件的方法

File file = new File("src\\newfile.txt");
//调用方法,立即删除抽象路径描述的文件,无论有没有
file.delete();
//当虚拟机停止运行之前,才执行删除的操作
file.deleteOnExit();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值