文件操作与IO(2)

Java中通过java.io.File类来对一个文件(包括目录)进行抽象的描述.注意,有File对象,并不代表真实存在该文件.

File概述

我们先来看看File类中的常见属性,构造方法和方法.

属性

修饰符及类型 属性 说明
static String pathSeparator 依赖系统的路径分隔符,String类型的表示
static char pathSeparator 依赖于系统的路径分隔符,char类型的表示

构造方法

签名 说明
File(File parent, String child) 根据父目录 + 孩子文件路径,创建一个新的File实例
File(String pathname) 根据文件路径创建一个新的File实例,路径可以是绝对路径也可以是相对路径
File(String parent, String child) 根据父目录+孩子文件路径,创建一个新的File实例,父目录用路径表示

其中,在File(String pathname)中:

这个路径也可以是不存在的路径.

构造一个File对象,需指定路径,此处路径可以是相对的也可以是绝对的.

如果写作绝对路径: (1)如直接在idea中 运行程序.此时工作目录就是项目所在目录.

(2)如果是把代码打包成一个单独的jar包来执行,此时工作目录就是jar包所在目录.

 方法

修饰符及返回值的类型 方法签名 说明
String getParent() 返回File对象的父目录文件路径
String getName() 返回File对象的纯文件名称
String getPath() 返回File对象的文件路径
String getAbsolutePath() 返回File对象的绝对路径
String getCanonicalPath() 返回File对象的修饰过的绝对路径
boolean exists() 判断File对象描述的文件是否真实存在
boolean isDirectory() 判断File对象代表的文件是否是一个目录
boolean isFile() 判断File对象代表的文件是否是一个普通文件
boolean createNewFile() 根据File对象,自动创建一个空文件.成功创建后返回true.
boolean delete() 根据File对象,删除该文件.成功删除后返回true.
void deleteOnExit()

根据File对象,标注文件将被删除,

删除动作会到JVM运行结束后才会运行

String[] list() 返回File对象代表下目录的所有文件名
File[] listFiles() 返回File对象代表的目录下的所有文件,以File对象表示
boolean mkdir() 创建File对象代表的目录
boolean mkdirs() 创建File对象代表的目录,如果必要,会创建中间目录
boolean

renameTo(File dest)

进行文件改名,也可视为我们平时的剪切,粘贴操作
boolean canRead() 判断用户是否对文件有可读权限
boolean canWrite() 判断用户是否对文件有可写权限

代码示例

示例1:观察get系列的观点与差异:

import java.io.File;
import java.io.IOException;

public class FileTest1 {
    public static void main(String[] args) throws IOException {
        File file = new File("C:/code/gitee秘密通道/Java所有代码/test _1_20/test.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());
    }
}

运行结果:

 文件操作与IO(2)_第1张图片

注意:

 ​

 如果构造File对象使用绝对路径,最后三个方法的操作结果确实没区别.但如果这样的话:

import java.io.File;
import java.io.IOException;

public class FileTest1 {
    public static void main(String[] args) throws IOException {
        File file = new File("./test.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());
    }
}

得出结果:

 文件操作与IO(2)_第2张图片

这时就有了明显的区别:

1.getPath()的结果就是File构造方法中的参数.

2. getAbsolutePath()中,此处是先一层一层找到system_code这一级目录,然后再找 . ,此时 . 就相当于原地踏步了一下

示例二

普通文件的创建

import java.io.File;
import java.io.IOException;

public class FileTest2 {
    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());
    }
}

运行结果:

文件操作与IO(2)_第3张图片 

同时,也在旁边创建出了这个文件:

文件操作与IO(2)_第4张图片 

示例三:

普通文件的删除

import java.io.File;
import java.io.IOException;

public class FileTest3 {
    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());
    }
}

运行结果:

 文件操作与IO(2)_第5张图片

示例4

观察deleteOnExit的现象

退出之后再删除,这样的文件,也称为"临时文件"->很有用有一些程序有这个.

作用:给你实时编辑的内容进行保存.防止文件没保存,机器突然pia~一下断电的情况 

 

import java.io.File;
import java.io.IOException;

import static java.lang.Thread.sleep;

public class FileTest4 {
    public static void main(String[] args) throws IOException, InterruptedException {
        File file = new File("some-file.txt"); //要求该文件不存在,才能看到
        System.out.println(file.exists());
        System.out.println(file.createNewFile());
        System.out.println(file.exists());
        sleep(5000);
        file.deleteOnExit();

        System.out.println(file.exists());
    }
}

结果:

 文件操作与IO(2)_第6张图片

程序运行结束后,文件还是被删除了.

示例5

观察目录的创建

 

import java.io.File;

public class FileTest5 {
    public static void main(String[] args) {
        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());
    }
}

运行结果:

 文件操作与IO(2)_第7张图片

同时,亦创建了一个新目录:

 文件操作与IO(2)_第8张图片

示例6

观察目录创建2

import java.io.File;

public class FileTest6 {
    public static void main(String[] args) {
        File dir = new File("some-parent\\some-dir");
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
        System.out.println(dir.mkdirs());
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
    }
}

运行结果:

 文件操作与IO(2)_第9张图片

同时:亦创建了一个新目录:

 文件操作与IO(2)_第10张图片

注意:如果使用mkdir(),如果中间目录不存在(这里就是some-parent不存在),则无法创建成功;

mkdirs()可以解决这个问题. 

 示例7

观察文件重命名:

import java.io.File;

public class FileTest7 {
    public static void main(String[] args) {
        File file = new File("hello-world.txt"); //这个要存在
        File dest = new File("dest.txt"); //要求这个不存在
        System.out.println(file.exists());
        System.out.println(dest.exists());
        System.out.println(file.renameTo(dest));
        System.out.println(file.exists());
        System.out.println(dest.exists());
    }
}

运行结果:

 文件操作与IO(2)_第11张图片

 

 

 

 

 

你可能感兴趣的:(java,开发语言)