10.1 File类
20.1.1 File类作用
文件可认为是相关记录或放在一起的数据的集合。文件一般存放在存储介质上:硬盘、u盘、光盘、软盘、云盘等。
java.io.File 类是专门对文件进行操作的类。(只能对文件本身进行操作,不能对文件内容操作)
File类是“文件和目录路径名的抽象表示”。 而不是指文件的内容(IO)。
File类定义了一些与平台无关的方法操作,如:创建、删除文件和重命名等。
Java中目录被看成是一个特殊的文件。 File.listFiles()方法可以返回目录中所有的子目录和文件。
在unix下路径分隔符为(/),而在windos中则是为(\),在java中可以正确的处理不同系统中的分隔符。注意:从1.5开始在java中可以统一使用(/)来作为路径分隔符。
20.1.2 File类的构造方法
public File(String pathname); 以pathname为路径创建File对象,如果pathname是相对路径,则是相对于Java的系统属性user.dir中的路径。(对eclipse创建的java工程来说,就是该工程的根目录。)
public File(File dir,String name); dir指父级目录的文件对象,name指要在该目录创建的文件名,以此构造方法创建文件名为name的文件对象。
20.1.3 File类文件属性
20.1.3.1 属性:
public static final String separator 存储了当前系统的名称分隔符,在 UNIX 和Mac系统上,此字段的值为 '/';在 Windows 系统上,它为 '\';为了程序的跨平台特性,文件的路径应该用这个属性值来代表。
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); } } }