JavaSE File类的使用
-
Java.io.File类:文件和目录路径名的抽象表示形式,与平台无关
-
File能新建、删除、重命名文件和目录,但是不能访问文件内容本身。(需要使用输入/输出流)
-
File对象可以作为参数传递给流的构造函数
-
File类的构造方法:
public File(String pathname)
public File(String parent, String child)
File类代表与平台无关的文件和目录。
1 常用方法
-
访问文件名:
函数名称 函数功能 getname() 获取文件名称 getPath() 获取文件路径 getAbsolutePath() 获取绝对路径,会相对补齐 getAbsoluteFile() 返回一个用当前文件的绝对路径构建的file对象 getParent() 获取文件/文件夹的父类路径 renameTo(File) 使用file对象给文件/文件夹重命名 案例展示:
package com.io; //访问文件名案例 import java.io.File; import java.util.zip.GZIPOutputStream; public class Test1 { public static void main(String[] args) { File f = new File("/Users/demut/Documents/File/tt.txt");//此时f为tt.txt文件 File fp = new File("/Users/demut/Documents/File");//此fp为目录 // File f1 = new File("/Users/demut/","/Documents/File/tt.txt");//使用相对较少 // File f2 = new File("/Users"+File.separator+"/demut/Documents/File/tt.txt");//也可以 System.out.println(f.getName());//获取文件名称 System.out.println(fp.getName());//获取文件夹名称 File f3 = new File("src/com/io/Test1.java");//此时使用相对路径创建file对象 System.out.println(f.getPath());//获取文件路径 System.out.println(f3.getAbsolutePath());//获取绝对路径,会自动补齐 System.out.println(f3.getAbsoluteFile()); //返回一个用当前文件的绝对路径构建的file对象 System.out.println(f3.getParent());//返回当前文件或文件夹的父级路径 f.renameTo(new File("/Users/demut/Documents/File/ttt.txt"));//给文件或文件夹重命名 } } /*运行结果: tt.txt File /Users/demut/Documents/File/tt.txt /Users/demut/JAVASE Project/JavaSE/src/com/io/Test1.java /Users/demut/JAVASE Project/JavaSE/src/com/io/Test1.java src/com/io */
-
文件检测:
函数名称 函数功能 exists() 判断文件/文件夹是否存在 canWrite() 判断文件是否可写 canRead() 判断文件是否可读 isFile() 判断file对象是否为文件 isDirectory() 判断file对象是否为路径 lastModified() 获取文件最后修改时间,返回一个毫秒数 length() 获取文件长度–>字节数 案例展示:
package com.io; import java.io.File; //文件检测 public class Test2 { public static void main(String[] args) { File file = new File("/Users/demut/Documents/File/ttt.txt"); System.out.println(file.exists()); //判断文件或文件夹是否存在 System.out.println(file.canWrite()); //判断文件是否可写 System.out.println(file.canRead()); //判断文件是否可读 System.out.println(file.isFile()); //判断file是否为文件 System.out.println(file.isDirectory()); //判断file是否为路径 System.out.println(file.lastModified());//获取文件的最后修改时间,返回的是一个毫秒数 System.out.println(file.length()); //获取文件长度-->字节数 } } /*运行结果: true true true true false 1583560929000 0 */
-
文件操作和目录操作:
函数名称 函数功能 createNewFile() 创建文件(需要捕获异常) mkdir() 创建单层目录 mkdirs() 创建多层目录 delete() 删除文件/文件夹 list() 返回当前文件夹的子集名称,包括目录和文件(String类型) listFiles() 返回当前文件夹的子集的file对象,包括目录和文件(File类型) 案例展示:
package com.io; import java.io.File; import java.io.IOException; //文件操作和目录操作 public class Test3 { public static void main(String[] args) { File file = new File("/Users/demut/Documents/File/tt2.txt"); if (!file.exists()){ try { file.createNewFile(); // 创建文件 } catch (IOException e) { e.printStackTrace(); } } //file.delete(); //删除文件 File file1 = new File("/Users/demut/Documents/File/aaa/bbb/ccc"); //file1.mkdir(); //创建单层目录 file1.mkdirs(); //创建多层目录 File file2 = new File("/Users/demut/Documents/File"); String[] fl = file2.list(); //返回当前文件夹的子集的名称,包括目录和文件 for (String s : fl){ System.out.println(s); } File[] fs = file2.listFiles(); //返回当前文件夹的子集的file对象,包括目录和文件 for (File ff : fs) { System.out.println(ff); } } } /*运行结果: tt2.txt .DS_Store ttt.txt aaa /Users/demut/Documents/File/tt2.txt /Users/demut/Documents/File/.DS_Store /Users/demut/Documents/File/ttt.txt /Users/demut/Documents/File/aaa */
2 递归遍历文件需求
现在需要遍历Targetu文件夹,返回该文件夹下的所有目录和文件,不论层次。
- 使用非递归,代码量冗杂,且重复很多。
- 使用递归,很简洁。
代码展示:
package com.io;
import java.io.File;
public class Demo01 {
public static void main(String[] args) {
File file = new File("/Users/demut/Desktop/Targetu");
new Demo01().test(file);
}
//递归遍历文件
public void test(File file){
if (file.isFile()){
System.out.println(file.getAbsolutePath()+"是文件");
}else {
System.out.println(file.getAbsolutePath()+"是文件夹");
//若为文件夹,则文件夹内可能有子文件夹或文件
File[] fs = file.listFiles();//获取当前文件夹下的子文件夹或者文件的file对象
if (fs != null && fs.length > 0){
for(File ff : fs){
test(ff); //此处使用递归代替了以下代码
// if (ff.isFile()){
// System.out.println(file.getAbsolutePath()+"是文件");
// }else {
// System.out.println(file.getAbsolutePath()+"是文件夹");
// File[] fs1 = ff.listFiles();
// if (fs1 != null && fs1.length > 0){
// for (File ff1 : fs1){
// //...... //始终在重复
// }
// }
// }
}
}
}
}
}
//运行结果可自行调试
写在最后
骄傲在败坏以先,狂心在跌倒之前!
To Demut!