文件的概念与Java中的File类

文件的概念与Java中的File类

一、文件的概念

1. 认识文件

在现实生活中,我们对于文件夹应该不陌生,例如办公桌上摆放的文件夹,学生档案柜中存放的文件夹等。

文件夹当中存放的就是一份一份的文件(在计算机文件夹中,文件夹里可以嵌套文件夹)。

在这里插入图片描述

2. 计算机中的文件

文件(File)在计算机领域里,是一词多用的。具体来说,可以分为两种定义:

  1. 狭义的文件:指电脑硬盘上的文件夹(目录)和文件。

    文件夹:用来存放各种文件或者子级文件夹。

    文件:存放数据信息。
    在这里插入图片描述

  2. 广义的文件:泛指计算机中很多的软硬件资源。在操作系统中,把很多的硬件设备和软件资源抽象成了文件,按照文件的方式来统一管理,例如网络编程当中使用到的网卡,操作系统也将它当做一个文件。

二、文件的目录结构

在操作系统进行文件管理时,是将文件以树型数据结构来组织管理的。下面以myDirs文件夹为示例展现其内部结构。

1. 目录的收起查看

在这里插入图片描述

2. 目录的展开查看

在这里插入图片描述

三、文件的访问路径

现在已经知道文件是作为一个个的树结点来展现的,那么我们如何访问具体的某个文件对象呢?要想访问某个文件有两种方式:

1. 使用绝对路径(absolute path)

绝对路径是以C、D或E盘开头的,即从最上层目录往下一直走,直到当前目标文件,其经过的路线则是绝对路径,一个文件有且只有一条绝对路径。

例如我想定位到hello.txt文件:

在这里插入图片描述

则其绝对路径为:d:/myDirs/dir_2/hello.txt

在windows中,使用斜杠/ 或 反斜杠\ 来表示目录分割符。建议使用斜杠,因为在Java中我们使用String字符串来表示路径,而如果字符串中含有反斜杠\则会被当做转义字符来处理,造成一些难以察觉的bug。

在这里插入图片描述

2. 使用相对路径(relative path)

相对路径是指以当前的工作目录为基准来表示的文件路径,例如我们在IDEA项目结构可以看到

在这里插入图片描述

红框所表示的路径是当前项目的工作路径,我们如果在这个路径下创建一个文件,则就是相对于这个工作目录来说的。

3. 相对路径的不同表示方式

我们回到上面myDirs文件夹的例子,这里以windows命令行工具来演示,如果当前是在D:/myDirs/dir_1目录下

在这里插入图片描述

我想进入到当前目录下的dir_4文件夹中,应该如何访问呢?
在这里插入图片描述

使用 ./ 表示当前目录,./dir_4则表示我们要访问的目标文件夹,在命令行中输入cd ./dir_4 则进入到了目标文件夹中

在这里插入图片描述

如果要返回到上一级目录dir_1中,使用 …/ 来表示上一级目录,在命令行中输入cd …/ 则退回到了上级目录
在这里插入图片描述

现在我想从当前目录 D:/myDirs/dir_1/ 切换到 D:/myDirs/dir_2/dir_5/目录下,又应该怎么做呢?

在这里插入图片描述

首先应该退回到上级目录myDirs中,然后先进入dir_2再进入dir_5,在命令行中输入 …/dir_2/dir_5/
在这里插入图片描述

总结:

  • ./ 表示当前目录(./有时可以省略不写)
  • …/ 表示当前目录的上一级目录

四、文件的类型

在所有文件中(例如.txt、.mp3、.mp4、.word、.pdf 等等),主要将文件分为两种类型

  1. 文本文件(存的是文本,也就是字符串)。
  2. 二进制文件(存的是二进制数据,而不一定是文本了)

这里的分类也不是绝对的,例如我可以用二进制文件来存储文本文件,然后再根据对应的字符编码通过转换将二进制文件中的数据以字符来读写,只不过这样做就比较麻烦了,所以不提倡。

如何判断一个文件属于文本文件还是二进制文件?

方法就是,将你要查看的目标文件以记事本的方式打开,如果没有看到乱码则就是文本文件,有之则是二进制文件。

五、Java提供的File类

Java官方提供的 java.io.File 类,是对文件(或目录)的抽象描述,有File类对象,并不代表真实存在该文件,类似Thread类,有Thread类的对象,并不真正代表操作系统创建了一个新线程。

File类API使用
1. 构造方法

在这里插入图片描述

通常情况下我们会使用 File(String pathname) 来构造对象,pathname字符串参数表示文件对象所对应计算机中的文件或文件夹路径,可以是相对路径或者绝对路径。

File file = new File("D:/temp/1.txt"); //当前new对象操作,并不会在计算机中创建一个对应的文件。这里只表示了一个文件的抽象路径,其对应文件是否真实存在并不知道。我们可以通过该对象提供的方法来判断文件是否存在,或者在计算机中自动创建当前文件。
2. 常用成员方法
修饰符及返回类型方法名说明
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()判断用户是否对文件有可写权限
3. 方法代码演示

我们还是以上面myDirs目录为例。

//以myDirs为例来练习File类的常用方法
public static void main(String[] args) throws IOException {
    File myDirs = new File("d:/myDirs");
    //获取文件路径的一系列方法
    System.out.println(myDirs.getParent());
    System.out.println(myDirs.getName());
    System.out.println(myDirs.getPath());
    System.out.println(myDirs.getAbsoluteFile());
    System.out.println(myDirs.getCanonicalPath());

    //判断文件状态和类型
    System.out.println(myDirs.exists());
    System.out.println(myDirs.isDirectory());
    System.out.println(myDirs.isFile());

    //创建当前对象所代表的目录
    System.out.println(myDirs.createNewFile());

    //输出当前目录下的所有文件
    String[] fileNames = myDirs.list();
    if (fileNames != null) {
        for(String s : fileNames){
            System.out.println(s);
        }
    }

    //以文件对象的形式获取当前目录下的所有文件,并输出显示
    File[] files = myDirs.listFiles();
    System.out.println(Arrays.toString(files)); //转换字符串对象

    //在当前工作目录下创建一个temp目录
    File temp = new File("./temp");
    System.out.println(temp.mkdir());

    //在当前工作目录下创建tempDir/dir_1目录
    File dir_1 = new File("./tempDir/dir_1");
    System.out.println(dir_1.mkdirs());

    //将刚才创建的temp目录修改为myTemp
    System.out.println(temp.renameTo(new File("./myTemp")));

    //查看当前用户对dir_1的访问权限
    System.out.println(dir_1.canRead());
    System.out.println(dir_1.canWrite());

    //删除刚才创建的所有文件
    System.out.println(dir_1.delete());
    temp.deleteOnExit();

    //查看当前用户对dir_1的访问权限
    System.out.println(dir_1.canRead());
    System.out.println(dir_1.canWrite());

    //删除刚才创建的所有文件
    System.out.println(dir_1.delete());
    temp.deleteOnExit();

}

文章为本人独立编写,难免会有错误之处。
如发现有误,恳请评论提出!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值