上一篇《Java中的IO流(二)》把学习Java的字符流以及转换流作了一下记录,从本篇开始将把IO流中对文件或文件夹操作的对象File类的学习进行一下记录。
一,File类的构造函数及字段
File类是将文件或文件夹封装成对象的类;方便对文件或文件夹的属性进行操作;File对象可以作为参数传递给流的构造函数。
File类的构造函数重载了四个版本,这四个版本可以将已存在或不存在的文件或文件夹封装成为File类的对象;
1 private static void file_demo1() throws URISyntaxException { 2 // 接收一个String路径参数通过将字符串路径名转换为抽象路径名来创建一个File实例
3 File file1 = new File("C:\\"); 4 // 接收一个String类型的父路径和一个String类型的子路径来创建一个File实例
5 File file2 = new File("C:\\", "filepath"); 6 // 通过接收一个File类型的父路径和一个String类型的子路径来创建一个File实例
7 File file3 = new File(file1, "filepath2"); 8 URI url = new URI(""); 9 //接收一个URI类型的路径来创建一个File实例
10 File file4 = new File(url); 11 }
在上面的例子中,我们为了创建File类的实例,用了“C:\\”这样的字符路径,File类为了兼容各种操作系统,提供了获取系统提供的默认分隔符的静态字段
1 private static void file_demo2() { 2 //在Unix系统上引值为“/”;在Windows上此值为“\\”,返回String
3 System.out.println(File.separator); 4 //在Unix系统上引值为“/”;在Windows上此值为“\\”,返回char
5 System.out.println(File.separatorChar); 6 //在Unix系统上引值为“:”;在Windows上此值为“;”,返回String,例如用在环境变量的分隔上
7 System.out.println(File.pathSeparator); 8 //在Unix系统上引值为“:”;在Windows上此值为“;”,返回char,例如用在环境变量的分隔上
9 System.out.println(File.pathSeparatorChar); 10 }
二,File类的常用功能——获取
1,获取文件名称
2,获取文件路径
3,获取文件大小
4,获取文件修改时间
1 private static void file_demo3() {
2 File file = new File("demo.txt"); 3 String fileName = file.getName();//文件名 4 String filePath = file.getPath();//相对路径 5 String fileAbsolutePath = file.getAbsolutePath();//绝对路径 6 long len = file.length();//文件大小 9 long modifytime = file.lastModified();//最后修改时间 10 System.out.println("fileName:" + fileName); 11 System.out.println("filePath:" + filePath); 12 System.out.println("fileAbsolutePath:" + fileAbsolutePath);15 System.out.println("lostModified:" + modifytime); 16 System.out.println("lengh:" + len);
17 System.out.println("parent:"+file.getParent());//返回此抽象路径的父目录,若没有父目录则返回null
18 System.out.println("parentFile:"+file.getParentFile());//返回此抽象路径的父目录的File对旬
19 }
三,文件或目录的创建与删除
1,创建文件
1 private static void file_demo4() throws IOException { 2 File file = new File("a.txt"); 3 file.createNewFile();// 创建文件,若文件不存在则创建,若已存在则不创建 4 // 静态字段,在默认临时路径下创建临时文件,第一个参数是文件名,第二个参数是文件后缀名,返回File对象
5 File.createTempFile("temp", "aaa"); 6 // 静态字段,在指定目录下创建临时文件,第一个参数是文件名,第二个参数是文件后缀名,返回File对象
7 File.createTempFile("temp", ".aaa", new File("C:\\Users")); 8 }
2,创建目录及删除目录或文件
1 private static void file_demo5() { 2 File file=new File("C:\\abc"); 3 file.mkdir();//创建文件夹也即是目录
4 file.mkdirs();//创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。即创建“C:\a\b\c\d”这样的目录
5 file.delete();//删除目录或文件,只能删除最内层的文件或目录,若多级目录只能删除一级
6 file.deleteOnExit();//当虚拟机退出时删除文件或目录
7 }
四,判断
1 private static void file_demo6() { 2 File file = new File("a.txt"); 3 System.out.println(file.exists());// 判断文件或目录是否存在
4 System.out.println(file.isDirectory());//判断是不是目录
5 System.out.println(file.isFile());//判断是不是文件
6 System.out.println(file.isAbsolute());//判断是不是绝对路径
7 System.out.println(file.isHidden());//判断是不是隐藏文件或目录
8 }
五,重命名
1 private static void file_demo7() { 2 File file = new File("2.avi"); 3 System.out.println(file.renameTo(new File("C:\\9999.avi")));//相当于剪切+重命名的功能
4 }
六,系统根目录和容量大小
1 private static void file_demo8() { 2 File[] files = File.listRoots();//系统根目录即系统盘符
3 for (File file : files) {//getUsableSpace()与 getFreeSpace() 相比,能更准确地估计可实际写入的新数据数。
4 System.out.println(file.getPath() + " 总容量:" + file.getTotalSpace() + " 可用容量:"
5 + file.getFreeSpace() + " 已用容量:" + file.getUsableSpace()); 6 } 7 }
七,获取目录内容
1 private static void file_demo8() { 2 File[] files = File.listRoots();//系统根目录即系统盘符
3 for (File file : files) {//getUsableSpace()与 getFreeSpace() 相比,能更准确地估计可实际写入的新数据数。
4 System.out.println(file.getPath() + " 总容量:" + file.getTotalSpace() + " 可用容量:"
5 + file.getFreeSpace() + " 已用容量:" + file.getUsableSpace()); 6 } 7 }
八,文件过滤器
返回文件字符数组
1 // 列出C盘下的java文件
2 private static void file_demo10() { 3 File file = new File("C:\\"); 4 String[] fileFilter = file.list(new MyFileNameFilter());// 接收一个实现了FilenameFilter接口的过滤器
5 for (String str : fileFilter) { 6 System.out.println(str); 7 } 8 }
1 public class MyFileNameFilter implements FilenameFilter { 2
3 @Override 4 public boolean accept(File dir, String name) { 5 return name.endsWith(".java"); 6 } 7
8 }
返回File文件对象的数组的过滤器
1 //列出C盘下非隐藏的文件
2 private static void file_demo11() { 3 File file = new File("C:\\"); 4 File[] files = file.listFiles(new MyFileFilter());//接收一个实现了FileFilter接口的文件属性过滤器对象的参数
5 for (File fl : files) { 6 System.out.println(fl.getName()); 7 } 8 }
1 public class MyFileFilter implements FileFilter { 2 @Override 3 public boolean accept(File pathname) { 4 return !pathname.isHidden(); 5 } 6 }
九,递归列出C盘下某一目录下的所有文件和目录
1 public static void main(String[] args) throws IOException { 2 File file = new File("c:\\abc"); 3 listFile(file); 4 } 5
6
7 private static void listFile(File file) { 8 File[] files = file.listFiles(); 9 for (File fl : files) { 10 if (fl.isDirectory()) { 11 System.out.println(fl.getName()); 12 listFile(fl); 13 } else { 14 System.out.println(fl.getName()); 15 } 16 } 17 }