Java之File类总结——2017.11.19
1、File类的概括:(摘自jdk)
文件和目录路径名的抽象表示形式。
用户界面和操作系统使用与系统相关的路径名字符串 来命名文件和目录。此类呈现分层路径名的一个抽象的、与系统无关的视图。抽象路径名 有两个组件:
一个可选的与系统有关的前缀 字符串,比如盘符,”/” 表示 UNIX 中的根目录,”\\” 表示 Microsoft Windows UNC 路径名。
零个或更多字符串名称 的序列。
抽象路径名中的第一个名称是目录名,对于 Microsoft Windows UNC 路径名则是主机名。抽象路径名中第一个名称之后的每个名称表示一个目录;最后一个名称既可以表示目录,也可以表示文件。空 抽象路径名没有前缀和名称序列。
路径名字符串与抽象路径名之间的转换与系统有关。将抽象路径名转换为路径名字符串时,每个名称与下一个名称之间用一个默认分隔符 隔开。默认名称分隔符由系统属性 file.separator 定义,可通过此类的公共静态字段 separator 和 separatorChar 使其可用。将路径名字符串转换为抽象路径名时,可以使用默认名称分隔符或者底层系统支持的任何其他名称分隔符来分隔其中的名称。
无论是抽象路径名还是路径名字符串,都可以是绝对 路径名或相对 路径名。绝对路径名是完整的路径名,不需要任何其他信息就可以定位它所表示的文件。相反,相对路径名必须使用取自其他路径名的信息进行解释。默认情况下,java.io 包中的类总是根据当前用户目录来解析相对路径名。此目录由系统属性 user.dir 指定,通常是 Java 虚拟机的调用目录。
调用此类的 getParent() 方法可以获取抽象路径名的父 路径名,它由路径名前缀以及路径名名称序列中的每个名称(最后一个除外)组成。对于任何具有绝对抽象路径名的 File 对象,如果其绝对抽象路径名以某个目录的绝对路径名开头,那么该目录的绝对路径名是该 File 对象的祖先。例如,抽象路径名 “/usr” 表示的目录是路径名 “/usr/local/bin” 所表示目录的一个祖先。
在处理 UNIX 平台的根目录,以及 Microsoft Windows 平台的盘符、根目录和 UNC 路径名时,将用到前缀这一概念。如下所示:
对于 UNIX 平台,绝对路径名的前缀始终是 “/”。相对路径名没有前缀。表示根目录的绝对路径名的前缀为 “/” 且名称序列为空。
对于 Microsoft Windows 平台,包含盘符的路径名前缀由驱动器号和一个 “:” 组成。如果路径名是绝对路径名,还可能后跟 “\”。UNC 路径名的前缀是 “\\”;主机名和共享名是名称序列中的前两个名称。没有指定驱动器的相对路径名没有前缀。
此类的实例可能表示(也可能不表示)实际文件系统对象,如文件或目录。如果它表示这种对象,那么该对象驻留在一个分区 中。分区是文件系统特定于操作系统的存储分区。一个存储设备(例如,物理磁盘驱动器、闪存、CD-ROM)可以包含多个分区。对象(如果有)将驻留在此路径名(绝对形式)某个祖先指定的分区上。
文件系统可以实现对实际文件系统对象上的某些操作(比如,读、写、执行)进行限制。这些限制统称为访问权限。文件系统可以对一个对象设置多个访问权限。例如,一个设置可能适用于对象的所有者,另一个设置则可能适用于所有其他用户。对象上的访问权限可能导致此类的某些方法执行失败。
File 类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变。
2、创建文件或者文件夹所要注意的事项:
1)使用File对象可以创建文件或者文件夹,里面跟创建有关的成员方法:
* public boolean mkdir()创建此抽象路径名指定的目录(文件夹)。
* 如果当前某个盘符下已经有了这个目录(文件夹),不会在创建了.
* public boolean createNewFile():创建文件的,如果已经有这个文件了,不在创建,并且该方法本身就会编译时期异常IOException
throws IOException
public boolean mkdirs()创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。(创建文件夹,文件夹不存在,才开始创建)
注意事项:
自己要清楚要创建的是文件夹还是文件,每个方法都不一样!
没有带盘符,默认到当前项目下创建文件或者文件夹..
3、删除目录是需要注意的事项:
如果不小心创建文件或者文件夹的时候,没有写盘符那么就会当前项目下进行创建
* public boolean delete()删除此抽象路径名表示的文件或目录
* 删除不能删除带有文件或者文件夹的目录
*注意事项:
* 删除的方法不能删除带有目录或者文件的文件夹
* 删除多个目录,必须逐一删除!
4、reName()的用法
* File类中的重命名功能:
* public boolean renameTo(File dest)重新命名此抽象路径名表示的文件。
*1)使用这个功能:当两个抽象路径一致,那么只是重命名
* 2)当这两个抽象路径不一致,有剪切并且改名了…
5、File类的高级获取功能:
* public String[] list():返回对象是一个字符串数组,当前哪个一盘符下的所有的文件以及文件夹的字符串名称数组
* public File[] listFiles():返回对象是一个File数组,当前哪个盘下的所有的文件以及文件夹的File数组
//遍历:遍历之前,一定要做非空判断
6、简单的遍历指定的盘符目录下的所有文件(包括子文件夹下的文件)
package org.westos.GetFileendwith.jpg;
import java.io.File;
/** * 获取E盘下所有的以.jpg结尾的文件的名称 * @author 代虎 * */
public class GetFile {
//遍历文件夹
public static File[] getSonFiles(File directory) {
File[] files = directory.listFiles();
for(File f:files) {
if(f.isDirectory()) {
System.out.println("文件夹:"+ f.getName());
getSonFiles(f);
}
if(f.isFile()){
System.out.println(f.getParent()+ "下的文件:");
System.out.println(f.getName());
}
}
return files;
}
//寻找有特定后缀的文件
public static void getSpecialFile(File file,String str) {
if(file.getName().endsWith(str)){
System.out.println(file.getAbsolutePath());
}
}
public static void main(String[] args) {
File file = new File("E:/测试");
for(File f:file.listFiles()) {
if(f.isFile()) {
getSpecialFile(f, ".jpg");
}
if(f.isDirectory()) {
getSonFiles(f);
getSpecialFile(f, ".jpg");
}
}
}
}
7、使用过滤器(A:FileFilter B:FilenameFileter)
package org.westos.GetFileendwith.jpg;
import java.io.File;
import java.io.FileFilter;
/** * 自定义文件过滤器 * @author 代虎 * */
public class MyFileFilter {
public static void main(String[] args) {
File file = new File("E:/测试");
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getAbsolutePath().endsWith(".java");
}
});
for(File f:files) {
System.out.println(f.getName());
}
}
}
package org.westos.GetFileendwith.jpg;
import java.io.File;
import java.io.FilenameFilter;
/** * 使用字符串过滤文件 * @author 代虎 * */
public class MyFileFilter02 {
public static void main(String[] args) {
File file = new File("E:/测试");
String[] str = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir, name).isFile()&&name.endsWith(".java");
}
});
for(String s:str) {
System.out.println(s);
}
}
}