Java 文件操作
文件系统是操作系统用于明确存储设备(通常是的是磁盘硬盘等)或分区上的文件的方法和数据结构; 即在存储设备上组织文件的方法.
java.io.File 类
在 Java 中, java.io.File
类用于操作系统的文件, 包括了创建文件, 创建目录, 判断文件是否存在, 设置读写权限, 所有者, 最后修改时间等操作. 但是读写文件的内容并不使用 File
类.
在使用 File
类之前, 首先我们需要用到 File
的构造函数来创建一个 File
对象, File
类的构造方法如下:
1. 通过父 File, 以及子文件名创建
public File(File parent, String child) //如果 child 为null 会抛出 NullPointerException
2. 直接通过文件名创建
public File(String pathname)
3. 通过父目录名, 以及子文件名创建
public File(String parent, String child)
4. 通过 URI
创建
public File(URI uri)
具体的初始化过程请参见 Java 手册 File 类构造函数 部分.
接下来我们就可以使用对应的方法操作文件对象了. 以下是一些简单的调用示例:
文件是否可写:
File f = new File("D:/21yi.com/article/com/yi21/file/Yi21File.java"); System.out.println("路径: '" + f.getAbsolutePath() + "', 是否可以写入? " + f.canWrite());
创建一个临时文件以及文件是否存在:
try { File f = File.createTempFile("21yi_", ".temp"); System.out.println("临时文件路径: " + f.getAbsolutePath()); System.out.println("文件是否存在: " + f.exists()); f.deleteOnExit(); } catch (IOException e) { System.err.println("Error: " + e.getMessage()); }
判断文件是否存在并删除:
File f = new File("D:/21yi_file.txt"); if (!f.exists()) { System.out.println("文件存在否? " + f.exists()); try { if(f.createNewFile()) { System.out.println("创建文件成功."); } else { System.out.println("创建文件失败."); } } catch (IOException e) { System.err.println("ERROR: " + e.getMessage()); } } System.out.println("文件是否存在? " + f.exists()); if (f.exists()) { if(f.delete()) { System.out.println("删除了文件."); } else { System.out.println("删除文件失败."); } } System.out.println("文件是否存在? " + f.exists());
File 类的所有操作方法, 内置属性参见下表, 使用实例请参见具体链接:
序号 | 类型 | 名称 | 说明 |
---|---|---|---|
1 | 方法 | File() |
|
2 | 方法 | File.canExecute() |
判断文件是否可以执行 |
3 | 方法 | File.canRead() |
判断文件是否可读 |
4 | 方法 | File.canWrite() |
判断文件是否可以写入 |
5 | 方法 | File.compareTo() |
按字典顺序比较两个抽象路径名, 此方法定义的排序取决于底层系统. |
6 | 方法 | File.createNewFile() |
当且仅当具有此名称的文件尚不存在时, 以原子方式创建以该路径名命名的新的空文件. |
7 | 方法 | File.createTempFile() |
使用给定的前缀和后缀生成其名称在默认临时文件目录或指定目录下创建一个临时文件. |
8 | 方法 | File.delete() |
按路径删除文件, 若路径是一个目录, 则只有目录为空时才能删除. |
9 | 方法 | File.deleteOnExit() |
请求在虚拟机终止时删除当前路径名表示的文件或目录。 |
10 | 方法 | File.equals() |
判断当前文件路径名是否与给定对象相等 |
11 | 方法 | File.exists() |
判断文件/目录是否存在 |
12 | 方法 | File.getAbsoluteFile() |
获得当前 |
13 | 方法 | File.getAbsolutePath() |
获取当前文件/目录的绝对路径 |
14 | 方法 | File.getCanonicalFile() |
获取当前文件/目录的规范路径形式的文件对象 |
15 | 方法 | File.getCanonicalPath() |
获取当前文件/目录的规范路径 |
16 | 方法 | File.getFreeSpace() |
获取分区中未使用的空间的字节数 |
17 | 方法 | File.getName() |
获取当前文件路径名表示的文件或目录的名称 |
18 | 方法 | File.getParent() |
获取文件对象的父目录地址 |
19 | 方法 | File.getParentFile() |
获取文件对象的父目录的 |
20 | 方法 | File.getPath() |
将当前文件路径名转换为路径名字符串 |
21 | 方法 | File.getTotalSpace() |
获取分区中所有空间的字节数 |
22 | 方法 | File.getUsableSpace() |
获取文件对象路径名命名的分区上, 当前虚拟机可用的字节数 |
23 | 方法 | File.hashCode() |
计算此抽象路径名的哈希码 |
24 | 方法 | File.isAbsolute() |
测试当前路径名是否是绝对的 |
25 | 方法 | File.isDirectory() |
判断当前文件路径是否是一个目录 |
26 | 方法 | File.isFile() |
判断当前文件路径是否是一个文件 |
27 | 方法 | File.isHidden() |
检测 |
28 | 方法 | File.lastModified() |
获取文件/目录的最后修改时间 |
29 | 方法 | File.length() |
获得一个文件的大小. |
30 | 方法 | File.list() |
获取目录下的目录和文件列表 |
31 | 方法 | File.listFiles() |
获取目录下文件/目录的 |
32 | 方法 | File.listRoots() |
列出有效的文件系统的根文件/目录 |
33 | 方法 | File.mkdir() |
创建目录 |
34 | 方法 | File.mkdirs() |
按路径创建目录, 如果父目录不存在就创建父目录. |
35 | 方法 | File.renameTo() |
修改文件的名称/移动文件 |
36 | 方法 | File.setExecutable() |
设置对象路径对应的文件/目录的可执行状态 |
37 | 方法 | File.setLastModified() |
设置文件的最后修改时间 |
38 | 方法 | File.setReadable() |
设置对象路径对应的文件/目录的可读状态 |
39 | 方法 | File.setReadOnly() |
设置对象路径对应的文件/目录为只读 |
40 | 方法 | File.setWritable() |
设置对象路径对应的文件/目录是否可写入 |
41 | 方法 | File.toPath() |
获取 File 的 Path 对象 |
42 | 方法 | File.toString() |
将文件路径转换成 String |
43 | 方法 | File.toURI() |
构建一个 File 的 URI 形式对象 |
44 | 属性 | File.pathSeparator |
系统相关的路径分隔符, 为方便起见表示为字符串。 |
45 | 属性 | File.pathSeparatorChar |
系统相关的路径分隔符, 是个字符不是字符串 |
46 | 属性 | File.separator |
系统相关的默认名称分隔符, 为方便起见表示为字符串. |
47 | 属性 | File.separatorChar |
系统相关的默认名称分隔符, 注意是字符而不是字符串 |
java.nio.file.Files 类
在 Java 中, java.io.file.Files
类提供了对于文件文件夹等进行操作的静态方法. 在大多数情况下, 该类定义的方法将委托给关联的文件系统提供程序来执行文件操作.
使用 Files
复制文件:
System.out.println("从一个 Path 复制到另一个 Path"); Path source = new File("com/yi21/files/Yi21FilesCopy.java").toPath(); Path target = FileSystems.getDefault().getPath("D:/21yi.com/tmp_dir", "FilesCopyPath.java"); Path path = Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING); System.out.println("从 Path 到 Path: " + path);
Files 类的所有操作方法, 内置属性参见下表, 使用实例请参见具体链接:
序号 | 类型 | 名称 | 说明 |
---|---|---|---|
1 | 方法 | Files.copy() |
复制一个 |
2 | 方法 | Files.createDirectories() |
先创建不存在的父目录再创建目标目录. |
3 | 方法 | Files.createDirectory() |
创建目录. |
4 | 方法 | Files.createFile() |
创建文件 |
5 | 方法 | Files.createLink() |
为现有文件创建新链接(目录条目) |
6 | 方法 | Files.createSymbolicLink() |
为文件创建一个符号链接 |
7 | 方法 | Files.createTempDirectory() |
在指定目录或默认临时目录下, 使用给定的前缀创建临时目录 |
8 | 方法 | Files.createTempFile() |
在指定目录或默认临时目录下, 使用给定的前缀和后缀创建临时空文件. |
9 | 方法 | Files.delete() |
通过给定的 |
10 | 方法 | Files.deleteIfExists() |
通过给定的 |
11 | 方法 | Files.exists() |
判断文件是否存在 |
12 | 方法 | Files.find() |
在起始文件下查找所需的文件 |
13 | 方法 | Files.getAttribute() |
读取文件的的属性 |
14 | 方法 | Files.getFileAttributeView() |
获取文件的的属性视图 |
15 | 方法 | Files.getFileStore() |
获取文件所在存储的 |
16 | 方法 | Files.getLastModifiedTime() |
获取文件的最后修改时间 |
17 | 方法 | Files.getOwner() |
获取一个文件的所有者 |
18 | 方法 | Files.getPosixFilePermissions() |
获取文件的 POSIX 文件权限. |
19 | 方法 | Files.isDirectory() |
判断文件是否为目录 |
20 | 方法 | Files.isExecutable() |
判断文件是否可执行 |
21 | 方法 | Files.isHidden() |
判断文件是否隐藏 |
22 | 方法 | Files.isReadable() |
判断文件是否可读 |
23 | 方法 | Files.isRegularFile() |
判断文件是否是一个规范路径的文件 |
24 | 方法 | Files.isSameFile() |
判断两个文件是否实际是同一个文件 |
25 | 方法 | Files.isSymbolicLink() |
判断文件是否是一个符号链接 |
26 | 方法 | Files.isWritable() |
判断文件是否是可以写入 |
27 | 方法 | Files.lines() |
从文件中读取所有的行作为流 |
28 | 方法 | Files.list() |
列举目录下的所有条目 |
29 | 方法 | Files.move() |
移动一个文件到目标文件 |
30 | 方法 | Files.newBufferedReader() |
打开一个文件等待读取, 返回一个 BufferedReader 作为从文件读取文本的管理者. |
31 | 方法 | Files.newBufferedWriter() |
打开一个文件等待写入, 返回一个 BufferedWriter 作为写入文件的管理者. |
32 | 方法 | Files.newByteChannel() |
打开或创建一个文件, 返回一个可查找的字节通道以访问该文件. |
33 | 方法 | Files.newDirectoryStream() |
打开一个目录, 返回一个 |
34 | 方法 | Files.newInputStream() |
打开一个文件, 返回 |
35 | 方法 | Files.newOutputStream() |
打开或创建一个文件, 返回 |
36 | 方法 | Files.notExists() |
判断文件是否不存在 |
37 | 方法 | Files.probeContentType() |
探测文件的内容类型 |
38 | 方法 | Files.readAllBytes() |
从文件中读取全部字节 |
39 | 方法 | Files.readAttributes() |
将一个文件的属性读取成批操作 |
40 | 方法 | Files.readSymbolicLink() |
读取一个符号链接的目标文件 |
41 | 方法 | Files.setAttribute() |
设置文件的属性 |
42 | 方法 | Files.setLastModifiedTime() |
设置文件的最后修改时间 |
43 | 方法 | Files.setOwner() |
设置文件的所有者 |
44 | 方法 | Files.setPosixFilePermissions() |
设置文件的Posx权限 |
45 | 方法 | Files.size() |
获取文件以字节为单位的大小 |
46 | 方法 | Files.walk() |
在起始目录下遍历文件 |
47 | 方法 | Files.walkFileTree() |
遍历一个文件树, 本方法适合做一些更细致的查找等文件的访问操作. |
48 | 方法 | Files.write() |
写入字节或字符迭代行文本到一个文件 |
以上就是 Java 操作文件的全部内容了, 下一节: Java 读写文件的内容