javaI/O——File文件操作类

一、File文件操作类
听起来我们的文件操作类好像很神奇,可以通过我们的代码直接生成和删除一些东西;但其实它就是一个普通类,要对这个类进行一系列的使用需要实例化对象。对File的实例化对象我们需要用到两个构造方法:
(1)public File(String parthname);
(2)public File(String parent,Stirng child);–>设置子路径和父路径。
1.File类的使用
当我们想要进行文件操作的时候可以通过File类进行:
(1)创建一个新文件:
public boolean createNewFile() throws IOException
(2)判断文件是否存在:
public boolean exists();
(3)删除文件:
public boolean delete();
注意:
(1)File类中的所有对文件操作的方法,都只是改变这个文件本身,但是对文件里面的内容不会改变。
(2)在不同的操作系统文件分隔符、大小写都有区分的:
(a)文件路径分隔符
在windows操作系统下—>
在Linux操作系统下—>/
在Unix操作系统下—>/
(b)路径分隔符
在windows操作系统下——>;
在Linux操作系统下——> :
在Unix操作系统下——>:
(c)文件名的大小写
在windows下文件名部分大小写;
在Linux、Unix操作系统下要七分大小写。
所以,我们在实例化File类的对象的时候对于文件分隔符采用:File.separator;对于路径分隔符,我们采用File.pathSeparator;
2.目录(路径)操作
在File类中关于目录有如下方法:
(1)取得父路径或父File对象:
public String getParent();–》取父路径
public File getParentFile();–》取父File对象
上面两个方法都可以取得父路径,但是若想创建父路径,此时最好取得父路径的File类对象。如果只是单纯的查看父路径的时候我们才使用getParent()方法。
(2)创建目录(无论多少级目录都会创建)
eg:

//        3.文件目录的操作
        //separator由不同操作系统下的JVM决定到底使用哪种分隔符
        File file=new File("E:"+File.separator+"learn"+File.separator+"javaio"+File.separator+"a1");
       //上面写的这个父路径在我的电脑里面是存在的所以,对于下面的这个条件的判断结果是false
        if(!file.getParentFile().exists()){//判断父File对象是否存在
            file.getParentFile().mkdirs();//-》对象(父File的对象)调用它的方法不管由多少级父目录都创建父目录
        }
        if(file.exists()){
            //当前文件是否存在的判断->我们是定的这个文件a1在这个路径下面是不存的,所以经过下面代码的执行会创建这个文件
            file.delete();
        }else{
            file.createNewFile();
        }

**创建文件的另外一种方法:

Path path=Path,get("E","learn","io","a1");
File file=path.toFile();//讲这个获得的路径转化为文件,可以直接获得文件不用进行判断是否为文件。

3.文件信息
在File类里面还提供了许多关于取得文件信息的方法:
(1)判断路径是否是文件:
public boolean isFile();
(2)判断路径是否是目录:
public boolean isDirectory();
(3)取得文件大小(字节):
public long length();
(4)最后一次修改日期:
public long lastModifiled();
eg:

//        4.文件信息
//// (1)取得文件信息操作
//        //这是我们需要进行操作的文件
//        File file = new File("E:"+File.separator+"learn"+File.separator+"javaio"+File.separator+"a1");
//        //首先对于以上的路径我们并不知道是否为文件,所以需要我们判断这个枯井是否为文件
//        if(file.exists()&&file.isFile()){
//            System.out.println("文件大小"+file.length());
//            System.out.println("最后一次修改日期:"+new Date(file.lastModified()));
//        }

// (2)列出目录中的全部组成
        //下面是需要操作的文件
    File file=new File("E:"+File.separator+"learn"+File.separator+"javaio");
    //保证这个目录是存在的
        if(file.exists()&&file.isDirectory()){
            //列出目录中的所有内容
            //listFile()这个方法:file是普通文件返回null;file是目录返回目录下的所有内容(文件以及文件夹)
            File[] result=file.listFiles();
            for(int i=0;i<result.length;i++){
                System.out.println(result[i]);
            }
        }
    }
}

在这里插入图片描述
注意:区分普通文件和目录
4、综合案例(目录列表)
虽然我们的File类提供了listFile()方法,但是这个方法本身只能列出本目录中的第一级信息(就是如果在一个目录的下面出现了文件,在这个目录中还有目录。这个时候就以文件为标准列出所有内容,但是在这个与文件同级的目录里面的内容就不能列出它的信息了)。
这个时候我们采用递归的方法:

//递归打印当前目录下的所有层次的文件信息
File file = new File("E:"+File.separator+"learn"+File.separator+"javaio");
    listAllFiles(file);//从此处开始递归
    }
    public static void listAllFiles(File file){
        //将给定目录的文件列出其一级信息,然后再对这些一级信息进行判断,将不是普通文件的再次进行listFile(),直到这个文件为普通文件
        if(file.isDirectory()){
            File[] result=file.listFiles();//继续列出子目录内容
            if(result!=null){
                for(File file2:result){
                    listAllFiles(file2);
                }
            }
        }else{
            //给的这个file就是文件,直接打印
            System.out.println(file);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/ZhuiZhuDream5/article/details/84876041