文件操作与IO(2)

发布时间:2024年01月21日

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

File概述

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

属性

修饰符及类型属性说明
static StringpathSeparator依赖系统的路径分隔符,String类型的表示
static charpathSeparator依赖于系统的路径分隔符,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包所在目录.

?方法

修饰符及返回值的类型方法签名说明
StringgetParent()返回File对象的父目录文件路径
StringgetName()返回File对象的纯文件名称
StringgetPath()返回File对象的文件路径
StringgetAbsolutePath()返回File对象的绝对路径
StringgetCanonicalPath()返回File对象的修饰过的绝对路径
booleanexists()判断File对象描述的文件是否真实存在
booleanisDirectory()判断File对象代表的文件是否是一个目录
booleanisFile()判断File对象代表的文件是否是一个普通文件
booleancreateNewFile()根据File对象,自动创建一个空文件.成功创建后返回true.
booleandelete()根据File对象,删除该文件.成功删除后返回true.
voiddeleteOnExit()

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

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

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

renameTo(File dest)

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

代码示例

示例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());
    }
}

运行结果:

?

注意:

??

?如果构造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());
    }
}

得出结果:

?

这时就有了明显的区别:

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());
    }
}

运行结果:

?

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

?

示例三:

普通文件的删除

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());
    }
}

运行结果:

?

示例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());
    }
}

结果:

?

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

示例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());
    }
}

运行结果:

?

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

?

示例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());
    }
}

运行结果:

?

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

?

注意:如果使用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());
    }
}

运行结果:

?

?

?

?

?

?

文章来源:https://blog.csdn.net/asdssadddd/article/details/135710597
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。