10.1 File类

20.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中可以统一使用(/)来作为路径分隔符。

20.1.2 File类的构造方法

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

  2. public File(File dir,String name); dir指父级目录的文件对象,name指要在该目录创建的文件名,以此构造方法创建文件名为name的文件对象。

20.1.3 File类文件属性

20.1.3.1 属性:

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

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

20.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时使用指定的路径;提示1
public String getAbsolutePath() 返回此File对象的绝对路径名
public File getAbsoluteFile() 返回该文件的绝对路径的文件对象。
public String getParent() 返回该文件所在的目录的路径。提示2
public File getParentFile() 返回该文件所在的目录对象。

提示1

创建文件的时候是相对路径就返回相对路径,是绝对路径就返回绝对路径。

提示2

getParent()方法是通过字符串的截取实现,创建文件的时候是相对路径就返回最后一个斜杠之前的相对路径,是绝对路径就返回最后一个斜杠之前的绝对路径。

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

方法名 描述
public boolean createNewFile() 当文件不存在是,则创建一个空文件(非目录)
public boolean delete() 删除文件。如果是目录必须是空目录才能删除
public boolean mkdir() 创建此抽象路径名指定的目录,只能创建最后一级目录(保证上一级目录存在)
public boolean mkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录
public boolean renameTo(File dest) 重新命名此抽象路径名表示的文件(也可以重命名文件后剪切到别的目录)
//笔记:
File file = new File("D/test.txt");
if(!file.exists()){
  try {
    //创建空文件
    boolean createNewFile = file.createNewFile();
    System.out.println("createNewFile:"+createNewFile);
  } catch (IOException e) {
    e.printStackTrace();
  }
}

/**delete():删除文件或空目录*/
File file1 = new File("E/java");
if(file1.exists()){
  boolean delete = file1.delete();
  System.out.println("delete:"+delete);
}

/**mkdir():只能创建最后一级目录,(保证上一级目录存在)*/
File file2 = new File("E/java");
boolean mkdir = file2.mkdir();
System.out.println("mkdir:"+mkdir);
/**mkdirs():创建路径的所有不存在的目录,存在的级别目录则不创建*/
File file3 = new File("E/java/se/sz1704");
boolean mkdirs = file3.mkdirs();
System.out.println("mkdirs:"+mkdirs);

/**剪切功能:source.renameTo(target):将source文件剪切到target文件,两文件名可以不相同*/
File source = new File("D/abc.txt");
File target = new File("E/java/se/sz1704/a.txt");
boolean renameTo = source.renameTo(target);
System.out.println("renameTo:"+renameTo);
//重命名功能
new File("E/java/se/sz1704/a.txt").renameTo(new File("E/java/se/sz1704/abc.txt"));

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

方法名 描述
public String[] list() 返回此目录中的文件名和目录名的数组
public File[] listFiles() 返回此目录中的文件和目录的File实例数组
public File[] listFiles(FileFilter filter) 返回此目录中满足指定过滤器的文件和目录
/*** 根据过滤器筛选,返回当前目录下符合筛选规则的文件(含目录)的File对象 ***/

File[] listFiles = file.listFiles(new FileFilter() {
 /**
 * 筛选规则 返回true 则选中。返回false则不选中。
 * @params File pathname 当前目录下每一个File的对象
 */
  @Override
  public boolean accept(File pathname) {
    //System.out.println("accept:" + pathname.getAbsolutePath());
    if (pathname.getName().endsWith("jpg")) {
      return false;
    }
    return true;
  }
});

if (listFiles != null) {
  System.out.println("符合筛选规则的文件个数:" + listFiles.length);
  for (File f : listFiles) {
    System.out.println("for:" + f.getAbsolutePath());
  }
}

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

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

    /**
     * 递归算法 打印出目录(文件夹)中所有文件与目录(包括目录内部的文件和目录)。
     */
    public static void fun(File file) {
        if (file == null) {
            return;
        }
        if (!file.exists()) {
            return;
        }
        File[] list = file.listFiles();
        if (list == null) {//list為空说明file是文件
            return;
        }
        for (File f : list) {
            System.out.println(f.getAbsolutePath());
            if (f.isDirectory()) {
                fun(f);
            }
        }
    }

results matching ""

    No results matching ""