目录
1.认识文件(file)
1.1.文件的分类
1)文本文件:里面存储的是字符,文本本质上是存储的字节,但是字节和字节在一起就变成了了字符
2)二进制文件:里面存储的是字节
如何判定两者呢?
将一个文件使用记事本打开,如果出来的不是乱码就是文本文件,如果出来的是乱码,就是二进制文件。常见的文本文件类似于 .c .txt .java,常见的二进制文件:.doc .ppt .exe .java
1.2.关于目录结构
在计算机里,保存管理文件是通过操作系统的“文件系统”这样的模块来负责的,文件系统中一般通过“树形”结构来组织磁盘上的目录和文件的,这里的树形结构就类似于N叉树
整体的文件系统就是这种树形结构,如果是一个普通的文件,就是类似于叶子结点,如果是一个目录文件,就相当于是根节点,包含叶子节点
1.3.绝对路径和相对路径
在操作系统中通过“路径”这样的概念来描述一个具体的文件或者目录的位置。路径这里有两种描述风格
1)绝对路径:以盘符开头的
D:\Java\bin C:\Program Files\Huawei\Huawei OSD
2)相对路径以. 或者 .. 开头的
./src.zip ../java.exe
. 表示以当前路径为基准目录,去找目标文件, .. 表示以当前基准目录的上一级去找目标文件
2.java中的文件操作
2.1.File类:
Modifier and Type | Field and Description |
---|---|
static String | pathSeparator 与系统相关的路径分隔符字符,为方便起见,表示为字符串。 |
static char | pathSeparatorChar 与系统相关的路径分隔符。 |
static String | separator 与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。 |
static char | separatorChar 与系统相关的默认名称分隔符。 |
Constructor and Description |
---|
File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 |
File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 |
File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 |
File(URI uri) 通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。 |
③方法
boolean | canExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。 |
boolean | canRead() 测试应用程序是否可以读取由此抽象路径名表示的文件。 |
boolean | canWrite() 测试应用程序是否可以修改由此抽象路径名表示的文件。 |
int | compareTo(File pathname) 比较两个抽象的路径名字典。 |
boolean | createNewFile() 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。 |
static File | createTempFile(String prefix, String suffix) 在默认临时文件目录中创建一个空文件,使用给定的前缀和后缀生成其名称。 |
static File | createTempFile(String prefix, String suffix, File directory) 在指定的目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。 |
boolean | delete() 删除由此抽象路径名表示的文件或目录。 |
void | deleteOnExit() 请求在虚拟机终止时删除由此抽象路径名表示的文件或目录。 |
boolean | equals(Object obj) 测试此抽象路径名与给定对象的相等性。 |
boolean | exists() 测试此抽象路径名表示的文件或目录是否存在。 |
File | getAbsoluteFile() 返回此抽象路径名的绝对形式。 |
String | getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。 |
File | getCanonicalFile() 返回此抽象路径名的规范形式。 |
String | getCanonicalPath() 返回此抽象路径名的规范路径名字符串。 |
long | getFreeSpace() 返回分区未分配的字节数 named此抽象路径名。 |
String | getName() 返回由此抽象路径名表示的文件或目录的名称。 |
String | getParent() 返回此抽象路径名的父 |
File | getParentFile() 返回此抽象路径名的父,或抽象路径名 |
String | getPath() 将此抽象路径名转换为路径名字符串。 |
long | getTotalSpace() 通过此抽象路径名返回分区 named的大小。 |
long | getUsableSpace() 返回上的分区提供给该虚拟机的字节数 named此抽象路径名。 |
int | hashCode() 计算此抽象路径名的哈希码。 |
boolean | isAbsolute() 测试这个抽象路径名是否是绝对的。 |
boolean | isDirectory() 测试此抽象路径名表示的文件是否为目录。 |
boolean | isFile() 测试此抽象路径名表示的文件是否为普通文件。 |
boolean | isHidden() 测试此抽象路径名命名的文件是否为隐藏文件。 |
long | lastModified() 返回此抽象路径名表示的文件上次修改的时间。 |
long | length() 返回由此抽象路径名表示的文件的长度。 |
String[] | list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。 |
String[] | list(FilenameFilter filter) 返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。 |
File[] | listFiles() 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。 |
File[] | listFiles(FileFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 |
File[] | listFiles(FilenameFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 |
static File[] | listRoots() 列出可用的文件系统根。 |
boolean | mkdir() 创建由此抽象路径名命名的目录。 |
boolean | mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。 |
boolean | renameTo(File dest) 重命名由此抽象路径名表示的文件。 |
boolean | setExecutable(boolean executable) 为此抽象路径名设置所有者的执行权限的便利方法。 |
boolean | setExecutable(boolean executable, boolean ownerOnly) 设置该抽象路径名的所有者或每个人的执行权限。 |
boolean | setLastModified(long time) 设置由此抽象路径名命名的文件或目录的最后修改时间。 |
boolean | setReadable(boolean readable) 一种方便的方法来设置所有者对此抽象路径名的读取权限。 |
boolean | setReadable(boolean readable, boolean ownerOnly) 设置此抽象路径名的所有者或每个人的读取权限。 |
boolean | setReadOnly() 标记由此抽象路径名命名的文件或目录,以便只允许读取操作。 |
boolean | setWritable(boolean writable) 一种方便的方法来设置所有者对此抽象路径名的写入权限。 |
boolean | setWritable(boolean writable, boolean ownerOnly) 设置此抽象路径名的所有者或每个人的写入权限。 |
Path | toPath() 返回从此抽象路径构造的java.nio.file.Path对象。 |
String | toString() 返回此抽象路径名的路径名字符串。 |
URI | toURI() 构造一个表示此抽象路径名的 file: URI。 |
3.代码示例
示例一:
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("..\\hello-world.txt"); // 并不要求该文件真实存在
System.out.println(file.getParent());
System.out.println(file.getName());
System.out.println(file.getPath());
System.out.println(file.getAbsolutePath());
System.out.println(file.getCanonicalPath());
}
}
运行结果:
示例二:
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("hello-world.txt"); // 要求该文件不存在,才能看到相同
的现象
System.out.println(file.exists());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
System.out.println(file.createNewFile());
System.out.println(file.exists());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
System.out.println(file.createNewFile());
}
}
运行结果:
示例三:
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("some-file.txt"); // 要求该文件不存在,才能看到相同的现
象
System.out.println(file.exists());
System.out.println(file.createNewFile());
System.out.println(file.exists());
System.out.println(file.delete());
System.out.println(file.exists());
}
}
运行结果:
示例四:
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File dir = new File("some-dir"); // 要求该目录不存在,才能看到相同的现象
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
System.out.println(dir.mkdir());
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
}
}
------
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File dir = new File("some-parent\\some-dir"); // some-parent 和 somedir 都不存在
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
System.out.println(dir.mkdir());
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
}
}
运行结果:
mkdir() 的时候,如果中间目录不存在,则无法创建成功; mkdirs() 可以解决这个问题
mkdirs() 可以创建多个不存在的文件