【JavaEE】-- 文件操作和IO

什么是IO
input和output的首字母

数据进入内存叫输入,数据从内存出去叫输出。

1. 认识文件

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

在磁盘中保存的文件,我们常用的:

  1. 自己写的文本
  2. 自己下载的程序,比如:QQ、WECHAT
  3. 系统自带的文件
  4. 特殊的文件,目录(文件夹)。
    不同的文件可以用不同的后缀名去表示(.exe文件、.mp3视频文件、.txt文件…)。

2. 广义上的文件
操作系统的主要功能就是管理计算机设备,Linux系统中所有的计算机设置都是通过文件来描述的,包括键盘、显示器、打印机、网卡…

对于系统而言,文件包括硬件和软件。进程是申请资源的最小单位,当进程需要使用某一个文件时,用一个文件描述符来表示,并加入到文件描述符表中维护起来。当进程启动时会分配三个文件描述符:标准输入(input)、标准输出(output)、标准错误(error)。

1.1 树形结构组织和目录

目录时组织普通文件的,也就是我们通常说的文件夹,目录中也可以包含子目录。

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

1.1.1 几个常用的命令

cd命令改变所在目录
在这里插入图片描述
dir命令显示当前目录中的内容
在这里插入图片描述

tree–只显示目录结构,不显示普通文件

在这里插入图片描述
tree /F–显示目录结构,并显示普通文件
在这里插入图片描述

1.2 文件路径

  1. D:\app-down-load\QQNT\QQ.exe这是一个完整路径,可以通过正确的完整路径找到系统中任何一个文件。
  2. 在windows中路径分隔符默认是反斜杠(\),但是在这个基础上也保留了斜杠(/),所以在windows中斜杠和反斜杠都是可以识别的,但是推荐使用/,因为使用\需要转义\。
  3. 在Linux系统中路径的分隔符默认是斜杠(/)。
  4. 当输入路径时,会先从当前目录下查找对应的文件,如果没有就会去环境变量配置中依次查找。
    在这里插入图片描述

1. 绝对路径

D:\app-down-load\QQNT\QQ.exe

从盘符或根目录开始,每个子目录用分隔符隔开,一直到目标文件。

2. 相对路径
先要确认当前的工作目录,以工作目录为基准去找目标文件。

比如,现在我所处的目录是d:\app-down-load\QQNT,想要返回上一级目录就可以输入cd ..
在这里插入图片描述
..就表示上一级目录

.表示当前目录
在这里插入图片描述
还可以直接写程序名,默认在当前目录下查找
在这里插入图片描述
在代码中访问项目中包含的文件,建议使用相对路径,因为不同机器上的工作目录可能不同。

2. Java中操作文件

2.1 File概述

文件是操作系统中的概念,Java为不同的操作系统做了封装,提供了一个File类,来让Java程序员操作文件。

2.1.1 属性

修饰符及类型 属性 说明
static String pathSeparator 依赖于系统的路径分隔符,String类型的表示
static Char pathSeparatorChar 依赖于系统的路径分隔符,Char类型的表示
static String separator 目录的分隔符。String类型的表示
static Char separatorChar Char类型的表示
public class Demo101 {
   
   
    public static void main(String[] args) {
   
   
        System.out.println(File.separator);
        System.out.println(File.pathSeparator);
        System.out.println("============");
        System.out.println(File.separatorChar);
        System.out.println(File.pathSeparatorChar);
    }
}

输出结果:

\
;
============
\
;

输出的\是目录的分隔符。
输出的;是多个路径之间的分隔符。windows中是;,Linux中是:

2.1.2 构造方法

文件对象,类似于Thread对象,是Java层面的 ,不是系统中的文件,只是对文件的一个描述和定义。

签名 说明
File(File parent, String child) 根据父目录+孩子文件路径,创建一个新的File实例
File(String pathname) 根据文件路径创建一个新的File实例,路径可以是绝对路径或者相对路径
File(String parent, String child) 根据父目录+孩子文件路径,创建一个新的File实例,父目录用路径表示
public class Demo02_Constructor {
   
   
    public static void main(String[] args) {
   
   
        File file = new File("d:/temp");
        File file1 = new File(file, "test/hello.txt");
        System.out.println(file);
        System.out.println(file1);
        System.out.println("===========================");

        File file2 = new File("d:\\temp\\test\\hello.txt");
        System.out.println(file2);
        System.out.println("===========================");

        File file3 = new File("d:/temp", "test/hello.txt");
        System.out.println(file3);
    }
}

输出结果:

d:\temp
d:\temp\test\hello.txt
===========================
d:\temp\test\hello.txt
===========================
d:\temp\test\hello.txt

2.1.3 方法

2.1.3.1 观察get系列的特点和差异
修饰符及返回值类型 方法签名 说明
String getParent() 返回File对象的父目录文件路径
String getName() 返回FIle对象的纯文件名称
String getPath() 返回File对象的文件路径
String getAbsolutePath() 返回File对象的绝对路径
String getCanonicalPath() 返回File对象的修饰过的绝对路径
public class Demo03_get {
   
   
    public static void main(String[] args) throws IOException {
   
   
        File file = new File("d:/temp/test/hello.txt");
        System.out.println(file.getPath());//文件路径
        System.out.println(file.getParent());//父目录
        System.out.println(file.getName());//文件名
        System.out.println(file.getAbsolutePath());//绝对路径
        System.out.println(file.getCanonicalPath());//标准形式的路径

        System.out.println("=============================");
        File file1 = new File("./hello.txt");
        System.out.println(file1.getPath());//文件路径
        System.out.println(file1.getParent());//父目录
        System.out.println(file1.getName());//文件名
        System.out.println(file1.getAbsolutePath());//绝对路径
        System.out.println(file1.getCanonicalPath());//标准形式的路径
    }
}

运行结果:
在这里插入图片描述

2.1.3.2 普通文件的创建和删除
修饰符及返回值类型 方法签名 说明
boolean exists() 判断File对象描述的文件是否真实存在
boolean isDirectory() 判断File对象代表的文件是否是一个目录
boolean isFile() 判断 File 对象代表的文件是否是-个普通文件
boolean createNewFile() 根据File 对象,自动创建一个空文件。成功创建后返回true
boolean delete() 根据File对象,删除该文件。成功删除后返回true
public class Demo104_create {
   
   
    public static void main(String[] args) throws IOException {
   
   
        File file = new File("./hello.txt");
        System.out.println(file.exists());//false
        System.out.println(file.createNewFile());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cuckoo___

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值