什么是IO
input和output的首字母
数据进入内存叫输入,数据从内存出去叫输出。
1. 认识文件
1. 狭义上的文件
针对硬盘这种持久化存储的i/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,就类似办公桌上的一份份真实的文件一般。
在磁盘中保存的文件,我们常用的:
- 自己写的文本
- 自己下载的程序,比如:QQ、WECHAT
- 系统自带的文件
- 特殊的文件,目录(文件夹)。
不同的文件可以用不同的后缀名去表示(.exe文件、.mp3视频文件、.txt文件…)。
2. 广义上的文件
操作系统的主要功能就是管理计算机设备,Linux系统中所有的计算机设置都是通过文件来描述的,包括键盘、显示器、打印机、网卡…
对于系统而言,文件包括硬件和软件。进程是申请资源的最小单位,当进程需要使用某一个文件时,用一个文件描述符来表示,并加入到文件描述符表中维护起来。当进程启动时会分配三个文件描述符:标准输入(input)、标准输出(output)、标准错误(error)。
1.1 树形结构组织和目录
目录时组织普通文件的,也就是我们通常说的文件夹,目录中也可以包含子目录。


1.1.1 几个常用的命令
cd命令改变所在目录

dir命令显示当前目录中的内容

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

tree /F–显示目录结构,并显示普通文件

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





最低0.47元/天 解锁文章
1697

被折叠的 条评论
为什么被折叠?



