java File类

来源:互联网 发布:javaweb考试系统源码 编辑:程序博客网 时间:2024/06/09 14:31

File类

1.1 File类作用

  1. 文件可认为是相关记录或放在一起的数据的集合。文件一般存放在存储介质上:硬盘、u盘、光盘、软盘、云盘等。

  2. java.io.File 类是专门对文件进行操作的类。(只能对文件本身进行操作,不能对文件内容操作)

  3. File类是“文件和目录路径名的抽象表示”。 而不是指文件的内容(IO)。

  4. File类定义了一些与平台无关的方法操作,如:创建、删除文件和重命名等。

  5. Java中目录被看成是一个特殊的文件。 File.listFiles()方法可以返回目录中所有的子目录和文件。

  6. 在unix下路径分隔符为(/),而在windos中则是为(\),在java中可以正确的处理不同系统中的分隔符。注意:从1.5开始在java中可以统一使用(/)来作为路径分隔符。

1.2 File类的构造方法

  1. public File(String pathname); 以pathname为路径创建File对象,如果pathname是相对路径,则是相对于Java的系统属性user.dir中的路径。(对eclipse创建的java工程来说,就是该工程的根目录。)

  2. public File(File dir,String name);

  3. public File(String parentName,String name);

1.3 File类文件属性

1.3.1 属性:

  1. public static final String separator 存储了当前系统的名称分隔符,在 UNIX 和Mac系统上,此字段的值为 '/';在 Windows 系统上,它为 '\';为了程序的跨平台特性,文件的路径应该用这个属性值来代表。

  2. public static final char pathSeparator 存储了当前系统默认路径分割符号,在 UNIX 和Mac系统上,此字段的值为':',Windows系统是';'。

1.4 使用File类对文件进行访问

方法名描述public boolean canRead()是否可读public boolean canWrite()是否可写public boolean exists()文件或目录是否存在public boolean isDirectory()是否是目录(文件夹)public boolean isFile()是否是文件(非目录)public boolean isHidden()是否是隐藏文件public long lastModified()最后一次修改的时间public long length()返回文件大小,以字节为单位public String getName()返回文件的名字(不包含路径)public String getPath()返回创建File时使用指定的路径;提示public String getAbsolutePath()返回此File对象的绝对路径名public File getAbsoluteFile()返回该文件的绝对路径的文件对象。public String getParent()返回该文件所在的目录的路径。public File getParentFile()返回该文件所在的目录File对象。
提示创建文件的时候是相对路径就返回相对路径,是绝对路径就返回绝对路径。

示例代码:

   File f1 = new File("C:/a.txt");        String a1 = f1.getAbsolutePath();        System.out.println("a1:" + a1);        String path1 = f1.getPath();// 返回创建 File的路径        System.out.println("path1:" + path1);​        File f2 = new File("helloworld.txt");        String a2 = f2.getAbsolutePath();        System.out.println("a2:" + a2);​        File f3 = f2.getAbsoluteFile();        System.out.println("f3:" + f3.getPath());​        /** 在使用该方法的时候,最好把File 转成以绝对路径描述的FIle对象 */        String parent = f3.getParent();// 得到該File 所在目录的路径String        System.out.println("parent:" + parent);​        /** 在使用该方法的时候,最好把File 转成以绝对路径描述的FIle对象 */        File parentFile = f3.getParentFile();        System.out.println("parentFile:" + parentFile);// 得到該File 所在目录的路径File​        String path2 = f2.getPath();// 返回创建 File的路径        System.out.println("path2:" + path2);​        String name = f2.getName();// 得到文件名字        System.out.println("name:" + name);​        boolean exists = f2.exists();        System.out.println("exists:" + exists);        if (exists) {            /*** 以下方法都需要操作平台去操作文件,在使用的时候,最好对该文件判断是否存在 **/            boolean canRead = f2.canRead();            System.out.println("canRead:" + canRead);​            boolean canWrite = f2.canWrite();            System.out.println("canWrite:" + canWrite);​            boolean hidden = f2.isHidden();            System.out.println("hidden:" + hidden);​            boolean file = f2.isFile();            System.out.println("file:" + file);​            boolean directory = f2.isDirectory();            System.out.println("directory:" + directory);​            long lastModified = f2.lastModified();            System.out.println("最后一次修改的时间:" + lastModified);​            long length = f2.length();            System.out.println("length:" + length);​            /*** 以上方法都需要操作平台去操作文件 **/        }

1.5 使用File类对文件进行操作

方法名描述public boolean createNewFile()当文件不存在是,则创建一个空文件(非目录)public boolean delete()删除文件。如果是目录必须是空目录才能删除public boolean mkdir()创建此抽象路径名指定(最后一级)的目录public boolean mkdirs()创建此抽象路径名指定的目录,包括所有必需但不存在的父目录public boolean renameTo(File dest)重新命名此抽象路径名表示的文件

示例代码:

package main3;​import java.io.File;import java.io.IOException;​public class Main2 {​    public static void main(String[] args) {​        File f1 = new File("a/text.txt");        /**** 创建文件(要确保该文件所在的目录存在,否则会抛IO异常) ****/        if (!f1.exists()) {            try {                boolean createNewFile = f1.createNewFile();                System.out.println("createNewFile:" + createNewFile);            } catch (IOException e) {                e.printStackTrace();            }        } else {            System.out.println("该文件已存在...");        }​        /** 删除文件(如果该File是目录,则必须保证该目录问空目录。且只删除最后一级目录) */        File f2 = new File("b/text.txt");        boolean delete = f2.delete();        System.out.println("delete:" + delete);​        /** 创建目录(只创建最后一级目录,也需要确保该目录所在的目录存在,否则返回false) */        File f3 = new File("c");        boolean mkdir = f3.mkdir();        System.out.println("mkdir:" + mkdir);​        /** 创建多级目录 */        File f4 = new File("d/b/f/c/c");        boolean mkdirs = f4.mkdirs();        System.out.println("mkdirs:" + mkdirs);        System.out.println("正常结束...");​        testRenameTo();    }​    private static void testRenameTo() {​        // renameTo 剪切功能​        File from = new File("test.mp3");// 剪切的源文件的路径描述​        File to = new File("helloworld.mp3");// 粘贴的目标文件的路径描述​        /** 如果源文件和目标文件所在的目录相同,则就变成了重名功能 **/        boolean renameTo = from.renameTo(to);        System.out.println(renameTo);​    }​}​

1.6 使用File类浏览目录中的文件和子目录

方法名描述public String[] list()返回此目录中的文件名和目录名的数组public File[] listFiles()返回此目录中的文件和目录的File实例数组public File[] listFiles(FileFilter filter)返回此目录中满足指定过滤器的文件和目录

课堂练习:使用 递归算法 打印出目录(文件夹)中所有文件与目录(包括目录内部的文件和目录)。


private static void listChilds(File f){        if (f==null)              return;        System.out.println(f.getPath());        if (f.isFile())             return;        File[] files = f.listFiles();        for (File file : files)              listChilds(file);    }

示例代码:
File file = new File("D:\\java");// ​        File f2 = new File(file, "java001");        System.out.println(f2);​        File f4 = new File("D:\\java", "java001");        System.out.println(f4);​        String[] list = file.list();// 返回该目录下的所有文件的名字        for (String path : list) {            System.out.println(path);        }​        // 返回该目录下的所有 File 文件路径描述        File[] listFiles = file.listFiles();        if (listFiles != null) {            for (File f : listFiles) {                System.out.println(f);            }        }        // 返回此目录中满足指定过滤器的文件和目录        File[] files = file.listFiles(new FileFilter() {            @Override            public boolean accept(File pathname) {                if (pathname.isDirectory()) {                    return true;                } else {                    return false;                }            }        });​        for (File f : files) {            System.out.println("--->" + f);        }