java.io File类

    File类比较即抽象也不抽象。玩计算机每天都能看到那么多的文件夹,文件,目录等都是File类的实体。下面是来自jdk文档的说明:

        上面这个是jdk文档的说明翻译,比较死板。其实File 就是文件(打开计算机随便一个盘就能看到的),文件夹,或者叫目录、路径。因为你的一个文件也许会放的很深,之间存在着好多个文件夹。例如:D: /test1/test2/test3/test4.txt 。

这么说应该更能直观的说明这个File是什么了。但是,其实File 和我们计算机某盘中的文件还是有差异的。并不是说 

new File(“D: /test1/test2/test3/test4.txt "),就能在D盘中创建出这个文件test.txt。看看上面文档的说明:File类是文件和目录路径名的抽象表示形式。这只是抽象的表达。你完全可以写个demo,然后看看你定义的文件路径是否存在就清楚。

 public static  void  test1(){
        String dirname = "D:/test1/test2/test3/test4.txt";
        File f = new File(dirname);

    }

那么,怎么才能在物理内存(计算机某盘)中创建出test.txt,这个文件呢? File 提供了三个方法:

1. boolean createNewFile();  检查文件是否存在,如果不存在就创建。如果文件目录不存在,则报错:java.io.IOException: 系统找不到指定的路径。

2. boolean  mkdir() ;  创建目录,如果父级目录不存在,则创建失败,返回false。

3. boolean mkdirs() ; 创建此抽象路径名指定的目录,包括所有父目录。

 这里最好先理清,"文件","文件夹","目录",的关系、意思。 举个栗子: 方法1: createNewFile();.只是创建test4.txt, 其路径“test1/test2/test3”不是他创建的, 所以,如果D盘不存在这个路径,那么执行 f.createNewFile(); 就会报错。

mkdir(); 只能创建单个目录或者文件夹(单个目录只有一个文件夹),假设,要创建 "test3" 文件夹,但是系统找不到“test1/test2”的话也会报同样的错。所以,在创建文件的时候,最好先判断该路径是否存在,而创建路径最好使用第三个方法mkdirs();

public static void test2()throws Exception{
        String dir = "/test1/test2/test3/test4.txt";
        File f  = new File(dir);
        File pf = f.getParentFile();
        System.out.println("pf:"+pf);      //\test1\test2\test3
        boolean pb = pf.exists();
        System.out.println("pb:"+pb);
        if(!pb) pf.mkdirs();
        if(!f.exists()) {
            boolean b = f.createNewFile();
            System.out.println("b:"+b);
        }
    }

这里可能没有人注意到,我demo里面的路径并没有具体指明是在D盘,但是为何结果还是在D盘中创建呢???

这里是使用了相对路径,比起绝对路径,我觉得相对路径更灵活一点。 对于相对路径,jdk是这样解释的:

无论是抽象路径名还是路径名字符串,都可以是绝对 路径名或相对 路径名。绝对路径名是完整的路径名,不需要任何其他信息就可以定位它所表示的文件。相反,相对路径名必须使用取自其他路径名的信息进行解释。默认情况下,java.io 包中的类总是根据当前用户目录来解析相对路径名。此目录由系统属性 user.dir 指定,通常是 Java 虚拟机的调用目录。

假设有一java源文件Example.java在d盘根目录下,该文件不含package信息.我们进入命令行窗口,然后使用”d:”命令切换到d盘根目录下,然后

用”javac Example.java”来编译此文件,编译无错后,会在d盘根目录下自动生成”Example.class”文件.我们在调用”java Example”来运行

该程序.此时我们已经启动了一个jvm,这个jvm是在d盘根目录下被启动的,所以此jvm所加载的程序中File类的相对路径也就是相对这个路径的,即

d盘根目录:D:\.同时” 当前用户目录”也是D:\.在System.getProperty(“user.dir”);系统变量”user.dir”存放的也是这个值.

我们可以多做几次试验,把”Example.class”移动到不同路径下,同时在那些路径下,执行”java Example”命令启动jvm,我们会发现这个”当前

用户目录”是不断变化的,它的路径始终和我们在哪启动jvm的路径是一致的.

上面这个例子的来源: JAVA File

File的几个重要方法:

exists()  文件或文件夹是否存在。 在创建文件的时候几乎都要做这个判断

isDirectory()  是否是一个目录,如果不存在,则始终为false。区分文件和文件夹是个不错的选择,

delete() : 删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除。



 
 



猜你喜欢

转载自blog.csdn.net/qq_41694349/article/details/79625267