文件操作 java.io.File
①创建删除文件及目录 ②查看文件及目录属性 ③文件过滤器 (PS:不包括文件读写数据)
1.单个文件
创建单个文件,查看属性,删除单个文件。
1 package tmp; 2 3 import java.io.File; 4 import java.io.IOException; 5 6 public class File_createNewFile { 7 public static void main(String[] args) throws IOException { 8 9 //在当前目录下(当前项目的根目录)创建一个文件test.txt 10 File file = new File("."+File.separator+"test.txt"); 11 12 if(!file.exists()){ 13 file.createNewFile(); 14 System.out.println("文件创建完毕!"); 15 }else{ 16 System.out.println("该文件已存在!"); 17 } 18 19 System.out.println(file.getName()); //获取文件名 String 20 System.out.println(file.length()); //获取文件长度 long ,单位:字节 21 System.out.println(file.canRead()); //是否可读 22 System.out.println(file.canWrite()); //是否可写 23 System.out.println(file.isAbsolute()); //是否是一个绝对路径 24 System.out.println(file.isFile()); //是否是文件 25 System.out.println(file.isDirectory());//是否是目录 26 System.out.println(file.isHidden()); //是否隐藏 27 System.out.println(file.exists()); //是否存在 28 29 File[] files = file.listFiles(); //获取指定路径下子目录和子文件 30 for (File f : files) { 31 System.out.println(f); 32 } 33 34 File file2 = new File("."+File.separator+"test2.txt"); 35 file.renameTo(file2); //重命名/剪切 36 37 file.delete(); //删除文件 38 System.out.println(file.exists()); //文件不存在了 39 40 String path = file.getAbsolutePath();//获取绝对路径 41 System.out.println(path); 42 } 43 }
2.一级目录
一级目录的创建,删除。
1 import java.io.File; 2 3 // 使用File创建一个目录 4 public class File_mkdir { 5 public static void main(String[] args) { 6 //在当前目录下创建一个目录:demo 7 // File dir = new File("a/b/demo.txt"); // 只有当a/b两级目录存在时可创建,否则不行。 8 File dir = new File("demo.txt"); 9 if(!dir.exists()){ 10 dir.mkdir(); 11 System.out.println("目录已创建"); 12 }else{ 13 System.out.println("该目录已存在!"); 14 } 15 dir.delete(); // 如果删除的是目录,并且目录下有子文件或者子目录则会删除失败。 16 System.out.println(dir.exists()); 17 } 18 }
3.多级目录
多级目录的创建,删除。
1 import java.io.File; 2 3 //创建一个多级目录 4 public class File_mkdirs { 5 public static void main(String[] args) { 6 //在当前目录下创建目录:a/b/c/d/e/f 7 File dir = new File("a"+File.separator+"b"+File.separator+ 8 "c"+File.separator+"d"+File.separator+"e"+File.separator+"f"); 9 10 if(!dir.exists()){ 11 //mkdirs在创建当前File表示的目录时会将所有不存在的父目录一同创建出来。而mkdir不具备这样的功能. 12 dir.mkdirs(); 13 System.out.println("目录已创建!"); 14 }else{ 15 System.out.println("目录已存在!"); 16 } 17 18 delete(new File("a")); 19 } 20 21 //删除file文件或者file目录及其所有文件 22 public static void delete(File file){ 23 if(file.isDirectory()){ 24 //将该目录子项全部清除 25 File[] subs = file.listFiles(); 26 for(int i=0;i<subs.length;i++){ 27 delete(subs[i]); 28 } 29 } 30 file.delete(); 31 } 32 }
4.文件过滤器
1 import java.io.File; 2 3 //获取一个目录中的所有子项 4 public class File_listFiles { 5 public static void main(String[] args) { 6 7 File dir = new File("."); 8 /* 9 * boolean isFile() 10 * 判断当前File表示的是否为文件 11 * 12 * boolean isDirectory() 13 * 判断当前File表示的是否为目录 14 */ 15 //判断是否为目录 16 if(dir.isDirectory()){ 17 /* 18 * File[] listFiles() 19 * 返回的数组中每个元素为该File表示的目录中的一个子项 20 */ 21 File[] subs = dir.listFiles(); 22 for(int i = 0; i < subs.length; i++){ 23 System.out.println(subs[i].getName()); 24 } 25 } 26 27 } 28 }
1 import java.io.File; 2 import java.io.FileFilter; 3 4 //File提供了一个重载的listFiles方法,允许传入一个FileFilter(文件过滤器), 5 //然后将当前File表示的目录中满足该过滤器要求的子项返回. 6 public class FileFilterDemo1 { 7 public static void main(String[] args) { 8 //获取当前目录中所有名字以"."开头 的子项 9 File dir = new File("."); 10 FileFilter filter = new FileFilter(){ 11 //添加过滤条件,只要认为参数给定的file满足要求,则返回true即可 12 public boolean accept(File file) { 13 String name = file.getName(); 14 System.out.println("正在过滤:"+name); 15 return name.startsWith("."); 16 } 17 18 }; 19 File[] subs = dir.listFiles(filter); 20 for(int i = 0; i < subs.length; i++){ 21 System.out.println(subs[i].getName()); 22 } 23 } 24 }
1 import java.io.File; 2 import java.io.FileFilter; 3 4 public class FileFilterDemo2 { 5 public static void main(String[] args) { 6 File file = new File("D:\\"); 7 8 // FileFilter---文件过滤器 9 // 只获取D盘下的子文件 10 File[] fs = file.listFiles(new FileFilter() { 11 // 指定筛选规则 12 @Override 13 public boolean accept(File pathname) { 14 return pathname.isFile(); 15 } 16 }); 17 for(File f : fs){ 18 System.out.println(f); 19 } 20 } 21 }
5.文件名过滤器
1 import java.io.File; 2 import java.io.FilenameFilter; 3 4 public class FileNameFilterDemo { 5 public static void main(String[] args) { 6 7 File file = new File("D:\\"); 8 9 // FilenameFilter---文件名过滤器 10 File[] fs = file.listFiles(new FilenameFilter() { 11 12 @Override 13 public boolean accept(File dir, String name) { 14 return name.matches(".*[nN].*"); 15 } 16 }); 17 for (File f : fs) { 18 System.out.println(f); 19 } 20 } 21 }
其它文件操作练习:
1.统计java文件的个数
1 import java.io.File; 2 3 public class FileCountJavaFile { 4 public static void main(String[] args) { 5 File dir = new File("E:\\xs_daidaicgb\\java projects\\03API\\day17"); 6 System.out.println(countJava(dir)); 7 } 8 public static int countJava(File file){ 9 if(file == null){ 10 return 0; 11 } 12 if(!file.isDirectory()){ 13 if(file.getName().endsWith(".java")) 14 return 1; 15 else 16 return 0; 17 }else{ 18 int sum = 0; 19 File[] fs = file.listFiles(); 20 for(File f : fs){ 21 sum += countJava(f); 22 } 23 return sum; 24 } 25 } 26 }
2.将所有pdf文件提取到D:PDF下
1 import java.io.File; 2 3 public class FileTypeFind { 4 public static void main(String[] args) { 5 File file = new File("D:\\01javaBasic"); 6 //将D:\\01javaBasic下的pdf文件提取到D:\\PDF\\下 7 getTypeFile(file,"D:\\PDF\\","pdf"); 8 System.out.println("over"); 9 } 10 /** 11 * 将原文件中的制定类型文件,剪切到指定地址。若有重名文件自动用_数字标号。 12 * @param srcFile 需要操作的文件 13 * @param destPath 将筛选出来的文件存入destPath 14 * @param findType 制定类型的文件,例如pdf,txt,docx等 15 */ 16 public static void getTypeFile(File srcFile, String destPath, String findType){ 17 if(srcFile == null){ 18 throw new NullPointerException("文件不能为空!"); 19 } 20 if(srcFile.isDirectory()){ 21 File[] fs = srcFile.listFiles(); 22 for(File f : fs){ 23 if(f.isDirectory()) 24 System.out.println(f); 25 getTypeFile(f,destPath,findType); 26 } 27 }else{ 28 if(srcFile.getName().endsWith("."+findType)){ 29 File dir = new File(destPath+srcFile.getName()); 30 if(dir.exists()){ 31 int count = 0; 32 String fileName = srcFile.getName().substring(0,srcFile.getName().lastIndexOf(".")); 33 while(dir.exists()){ 34 count++; 35 dir = new File(destPath+fileName+"_"+count+"."+findType); 36 } 37 srcFile.renameTo(new File(destPath+fileName+"_"+count+"."+findType)); 38 }else{ 39 srcFile.renameTo(new File(destPath+srcFile.getName())); 40 } 41 } 42 } 43 } 44 }
效果: