java.io
类 File
java.lang.Object
java.io.File
- 所有已实现的接口:
- Serializable, Comparable<File>
- public class File extends Objectimplements Serializable, Comparable<File>
-
文件和目录路径名的抽象表示形式。
用户界面和操作系统使用与系统相关的路径名字符串 来命名文件和目录。此类呈现分层路径名的一个抽象的、与系统无关的视图。抽象路径名 有两个组件:
- 一个可选的与系统有关的前缀 字符串,比如盘符,
"/"
表示 UNIX 中的根目录,"\\"
表示 Microsoft Windows UNC 路径名。 - 零个或更多字符串名称 的序列。
- 一个可选的与系统有关的前缀 字符串,比如盘符,
1、构建File对象
查看相关的API文档 (jdk1.60)
构造方法摘要 | |
---|---|
File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 |
|
File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 |
|
File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 |
|
File(URI uri)
通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。 |
代码:
1 package 测试io; 2 3 import java.io.File; 4 5 /** 6 * 获取文件的几个常见方法 7 * @author liuzeyu12a 8 * 9 */ 10 11 public class FileDemo001 { 12 13 public static void main(String[] args) { 14 15 String path = "E:/JAVA"; 16 /** 17 * 构建File对象 18 */ 19 // 方法1 20 File file = new File(path); 21 System.out.println(file); 22 23 // 方法2 24 file = new File("E:", "Java"); 25 System.out.println(file); 26 27 // 方法3 28 file = new File(new File("E:/"), "java"); 29 System.out.println(file); 30 31 } 32 33 }
1.1 文件状态(存在 ?目录 : 文件 )
代码:
1 package 测试io; 2 3 import java.io.File; 4 5 /** 6 * 操作文件状态 7 * 文件状态 1、不存在: exists 8 * 2、存在 文件: isFile 9 * 文件夹: isDirectory 10 * 11 */ 12 public class FileDemo03 { 13 14 public static void main(String[] args) { 15 File src = new File("IO.png"); 16 System.out.println(src.getAbsolutePath()); 17 System.out.println("是否存在:" + src.exists()); 18 System.out.println("是否文件:" + src.isFile()); 19 System.out.println("是否文件夹:" + src.isDirectory()); 20 21 src = new File("IO.png"); 22 System.out.println("----------"); 23 System.out.println("是否存在:" + src.exists()); 24 System.out.println("是否文件:" + src.isFile()); 25 System.out.println("是否文件夹:" + src.isDirectory()); 26 27 src = new File("D:\java300\IO_study01"); 28 System.out.println("----------"); 29 System.out.println("是否存在:" + src.exists()); 30 System.out.println("是否文件:" + src.isFile()); 31 System.out.println("是否文件夹:" + src.isDirectory()); 32 33 // 文件状态 34 src = new File("xxx"); 35 if (null == src || !src.exists()) { 36 System.out.println("文件不存在"); 37 } else { 38 if (src.isFile()) { 39 System.out.println("文件操作"); 40 } else { 41 System.out.println("文件夹操作"); 42 } 43 } 44 45 } 46 47 }
1.2文件对象的一些其他的方法
代码:
1 package 测试文件; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.util.Date; 6 7 public class TestFile1 { 8 9 public static void main(String[] args) throws IOException { 10 File f = new File("e://bbb.txt"); 11 f.createNewFile(); // 创建文件 12 System.out.println(f.isDirectory()); // 是否为目录 13 System.out.println(f.getAbsoluteFile()); // 获取绝对路径 14 System.out.println(f.isFile()); // 是否为文件 15 System.out.println(new Date(f.lastModified())); // 最后修改时间 16 System.out.println(f.getName()); 17 System.out.println(f.length()); 18 System.out.println(f.getPath()); 19 20 f.renameTo(new File("222.txt")); // 改名 21 System.out.println(System.getProperty("user.dir")); // 获取当前工作空间 22 23 // 理解mkdir,mkdirs 24 File f2 = new File("e:/haha/xixi"); 25 boolean flag = f2.mkdir(); // 目录少一个就不创建 26 boolean flag2 = f2.mkdirs(); // 没有即创建 27 System.out.println("mkdir创建" + flag + " " + "mkdirs创建" + flag2); 28 29 } 30 }
2、路径的表示
1windows 下面的路径分隔符必须使用 \ 进行转义,Linuix上面的文件系统使用 /
所以为了养成好的编码习惯,建议使用:
1) /
2)使用File常量 separator 拼接.
代码:
1 package 测试io; 2 3 import java.io.File; 4 5 /** 6 * 路径,分隔符 / 7 * @author liuzeyu12a 8 * 9 */ 10 11 /** 12 * 数据源----->程序:这个过程称为读 程序----->界面:这个过程称为写 13 * 14 * @author liuzeyu12a 15 * 16 */ 17 public class PathDemo001 { 18 19 /** 20 * 分割符:separator 21 * 22 * @param args 23 */ 24 public static void main(String[] args) { 25 26 // 如果使用: 27 System.out.println(File.separator); // 输出:反斜杠 28 // 在window 里面要使用转义字符进行转义,如 29 String path = "E:\JAVA"; 30 // 如果使用separator就可以不用,我们使用拼接 31 path = "E:" + File.separator + "Java"; 32 33 // 建议使用:/ 34 path = "E:/JAVA"; 35 } 36 37 }
2.1 绝对路径 与 相对路径
相对路径与绝对路径 判断规则:
1)存在盘符:绝对路径
2)不存在盘符,当前路径user.dir
代码:
1 package 测试io; 2 3 import java.io.File; 4 5 /** 6 * 相对路径与绝对路径 判断规则: 7 * 1)存在盘符:绝对路径 8 * 2)不存在盘符,当前路径user.dir 9 * 10 * @author liuzeyu12a 11 * 12 */ 13 public class FileDemo002 { 14 15 public static void main(String[] args) { 16 17 // 绝对路径 18 String path = "E:/JAVA/北京尚学堂"; 19 File file = new File(path); 20 System.out.println(file.getAbsolutePath()); 21 22 // 相对路径 23 // 输出当前的工作空间路径 24 System.out.println(System.getProperty("user.dir")); 25 file = new File("IO.png"); // 相对于工作空间 26 System.out.println(file.getAbsolutePath()); // 此时创建了一个不存在的路径 27 } 28 29 }
3、递归实现文件目录的查看
递归体:
//level 表示文件目录的层次 public static void printFile(File f, int level) { for (int i = 0; i < level; i++) System.out.print("-"); System.out.println(f.getName()); if (f.isDirectory()) { File[] files = f.listFiles(); for (File temp : files) { printFile(temp, level + 1); } } }
实现代码:
package 测试文件; import java.io.File; public class PrintFile1 { public static void main(String[] args) { File f = new File("E:\JayChou地表最强泉州站"); printFile(f, 0); } //level 表示文件目录的层次 public static void printFile(File f, int level) { for (int i = 0; i < level; i++) System.out.print("-"); System.out.println(f.getName()); if (f.isDirectory()) { File[] files = f.listFiles(); for (File temp : files) { printFile(temp, level + 1); } } } }
*扩展延伸,利用面向对象思想统计文件的个数和文件夹的个数
1 package 测试io; 2 3 import java.io.File; 4 5 public class FileDirDemo01 { 6 7 // 文件夹长度 8 private int len; 9 // 文件夹路径 10 private String path; 11 // 文件夹个数 12 private int dirSize; 13 // 文件个数 14 private int fileSize; 15 16 // 文件源 17 private File src; 18 19 // 构造方法,创建file对象 20 21 public FileDirDemo01(String path) { 22 this.path = path; 23 this.src = new File(path); 24 dirCount(this.src); 25 } 26 27 public static void main(String[] args) { 28 FileDirDemo01 dirDemo = new FileDirDemo01("E:\JAVA\workspac\BF算法与KMP算法"); 29 System.out.println("文件夹大小" + dirDemo.len + "文件个数" + dirDemo.fileSize + "文件夹个数" + dirDemo.dirSize); 30 } 31 32 //文件计数,文件夹 33 public void dirCount(File f) { 34 35 if (f.exists() && f != null) { 36 37 if (f.isFile()) { 38 len += f.length(); 39 this.fileSize++; // 文件个数 40 } else { 41 this.dirSize++; 42 for (File flies : f.listFiles()) { 43 dirCount(flies); 44 } 45 } 46 } 47 } 48 49 }
学习参考jdk 1.60 文档
学完时间隔了好久 总感觉要把IO这块总结一下,学到脑子一团糊。写的不好的地方望大佬可以指出。