一 File 类
File 是文件或者目录的抽象表示形式 .也就是说它既可以表示一个标准文件(比如 : *.txt等)也可以表示一个目录(一组文件的集合).
说明 : 由于本文只是学习File类的相关API,因此直接使用代码来测试API,代码中有相应注释. 因此在代码之外不会有过多的文字描述.
1.1 File 类的静态成员.
注意 : 名称 != 路径
// 与系统有关的默认 名称 分割符.
System.out.println("名称分割符 : " + File.separator);
System.out.println("名称分割符 : " + File.separatorChar);
// 与系统有关的 路径 分隔符
System.out.println("路径分割符 : " + File.pathSeparator);
System.out.println("路径分割符 : " + File.pathSeparatorChar);
// 输出
// 名称分割符 : \
// 名称分割符 : \
// 路径分割符 : ;
// 路径分割符 : ;
1.2 创建 File 和 文件.
/**
* 创建和修改.
*/
public static void testFile_04() {
// 创建 File ,如果文件路径不存在则同样可以创建一个File实例.
// 因此不要使用 file==null 判断文件是否存在.应该使用 file.exists();
File file1 = new File("D:/TestForlder/123.txt");
System.out.println("存在 : " + file1.exists());
// 当文件不存在时创建文件
try {
System.out.println(file1.createNewFile());
} catch (IOException e) {
e.printStackTrace();
}
// 创建临时文件
try {
// 注意文件名称不是 "456.java" ,而是 "456" + "系统生成的字符串" + ".java"
// 临时文件 : D:\TestForlder\4563410495359450983005.java
File file2 = File.createTempFile("456", ".java",new File("D:/TestForlder"));
System.out.println("临时文件 : " + file2.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
// 删除文件
System.out.println(file1.delete());
// 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
new File("D:/TestForlder/1.java").deleteOnExit();
// 创建路径 , 父目录必须存在.不会自动创建父目录.
System.out.println("创建路径 : " + new File("D:/TestForlder/111").mkdir());
// 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
System.out.println("递归创建目录 : " + new File("D:/TestForlder/222/333").mkdirs());
// 重命名文件.
System.out.println(new File("D:/TestForlder/2.java")
.renameTo(new File("D:/TestForlder/重命名.java")));
}
1.3 设置文件属性.
/**
* 设置文件属性.
*/
public static void testFile_05() {
File file = new File("D:/TestForlder/3.java");
// 设置 所有者执行权限
file.setExecutable(true);
// 设置所有者或所有用户执行权限
file.setExecutable(true, false);
// 设置最后修改时间
file.setLastModified(123);
// 设置所有者读权限
file.setReadable(true);
// 设置所有者或所有用户的读
file.setReadable(true, false);
// 设置只读
file.setReadOnly();
// 设置所有者写权限
file.setWritable(true);
// 设置所有者或者所有用户的写权限
file.setWritable(true, false);
}
1.4 基本信息API
/**
* File 获取信息.
*/
public static void testFile_03() {
// getName() : 返回由此抽象路径名表示的文件或目录的名称。该名称是路径名名称序列中的最后一个名称。如果路径名名称序列为空,则返回空字符串。
// getPath() : 将此抽象路径名转换为一个路径名字符串。所得字符串使用默认名称分隔符分隔名称序列中的名称。
// getParent() : 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
// 局对路径
File file = new File("D:/TestForlder");
System.out.println("绝对路径 : " + file.getPath());
// 相对路径
File file2 = new File(".");
System.out.println("相对路径 : " + file2.getPath());
// 获取绝对路径 File JDK 文档上说是相当于 : new File(file2.getAbsolutePath());
File fileAb = file2.getAbsoluteFile();
File fileAb2 = new File(file.getAbsolutePath());
System.out.println("绝对路径文件 : " + fileAb.getPath());
// File 对象的局对路径.
System.out.println("绝对路径 : " + file.getAbsolutePath());
// 指定路径所在分区的剩余空间.
System.out.println("可用空间 : " + file.getFreeSpace() / (1024 * 1024 * 1024) + " G");
// 获取父目录名称
System.out.println("父目录名称 : " + file.getParent());
// 此路径上的总空间
System.out.println("总空间 : " + file.getTotalSpace() / (1024 * 1024 * 1024) + " G");
// 抽象路径名指定的分区上可用于此虚拟机的字节数。
System.out.println("JVM 可用空间 : " + file.getUsableSpace() / (1024 * 1024 * 1024) + " G");
// 最后修改时间
System.out.println("最后修改时间 : " + file.lastModified());
// 文件长度
System.out.println("文件长度 : " + file.length());
System.out.println("执行 : " + file.canExecute());
System.out.println("可读 : " + file.canRead());
System.out.println("可写 : " + file.canWrite());
System.out.println("存在 : " + file.exists());
System.out.println("绝对路径 : " + file.isAbsolute());
System.out.println("目录 : " + file.isDirectory());
System.out.println("标准文件 : " + file.isFile());
System.out.println("隐藏文件 : " + file.isHidden());
}
1.6 基本目录操作
/**
* 目录下文件.
*/
public static void testFile_01() {
// 文件路径.
String filePath = "D:/TestForlder";
// 创建目录File对象.
File file = new File(filePath);
// 获取目录下的所有文件. 使用正则表达式查找所有的 ".java" 文件.
String[] list = file.list(new MainEntry.DirFilter("\\w+.java"));
// 排序
Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
// 打印
for (String string : list) {
System.out.println("文件 : D:/TestFordler/" + string);
}
}
/**
* @author WSJ
* 文件名称过滤器,<br>
* 该类实现了 `FilenameFilter`接口.该接口只有一个`accept()`方法
* 该目录下的每一个文件口会执行该方法,来确定是否符合条件.
*/
public static class DirFilter implements FilenameFilter {
// 正则表达式
private Pattern mPattern;
public DirFilter(String regex) {
mPattern = Pattern.compile(regex);
}
@Override
public boolean accept(File dir, String name) {
// 使用正则表达式过滤文件, 每一个文件都会在这个方法中进行判断是否符合条件.
return mPattern.matcher(name).matches();
}
}
网友评论