每天保持好心情
File类是java.io包下代表与平台无关的文件和目录,File能创建,删除和重命名文件与目录,虽然它不能访问文件内容,却可以用来进行文件的相关操作。
下面是对文件的一些操作:
package day10.io; //导入所需要的包 import java.io.File; import java.io.IOException; public class TestFile { public static void main(String[] args) { // File f2 = new File("d:\\test\\test\\test"); File f1 = new File("d:\\test\\test\\test\\a.txt"); // File f2 = new File("d:","a.txt");//在D盘定义一个a.txt的文件 // 创建文件夹:单层目录。 // f2.mkdir(); // 创建多层文件夹 // f2.mkdirs(); System.out.println(f1.getParentFile().mkdirs()); try { // 创建文件,需要抛出异常 f1.createNewFile(); } catch (IOException e) { e.printStackTrace(); } boolean b1 = f1.isFile();//判断f1是否是文件 boolean b2 = f1.isDirectory();//判断f1是否是目录 String name = f1.getName();//获得f1的名字 long l = f1.length();//获得f1的长度 // 最后修改时间 f1.lastModified(); // 删除 f1.delete(); // 判断存在 f1.exists(); // 对于文件夹来说,只有空文件夹才能删除。 // java中的删除,跟回收站没有关系。 } } //执行的结果我们可以在自己电脑的D盘看到,创建及删除等,一目了然。
下面做一个小练习,如果文件存在则删除文件,否则就创建文件,然后列出这个这个文件夹和其中的文件,soeasy的问题,看一下怎么做吧!
package day10.io; import java.io.File; import java.io.IOException; public class TestFile2 { public static void main(String[] args) { File file = new File("d:\\test"); if(file.exists()){//判断是否存在 file.delete();//是就删除 }else{ try {//否则就创建,同样抛出异常 file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } // 列出一个文件夹中的所有文件及文件夹 File[] fileArr = file.listFiles(); for(File f : fileArr){//for循环的输出方式 System.out.println(f.getName());//获得文件名 } } } /*这个问题很简单,结果也很清晰,但是我们看到,获得的文件名只是该目录下的,而里面文件夹下的文件及文件夹怎么得到它们的文件名呢?解决这个问题我们就必须用到递归的方法了,看下代码!*/
package day10.io; import java.io.File; public class ListAllFile { public static void main(String[] args) { File file = new File("d:\\test"); print(file); } //递归的方法 public static void print(File file){ File[] fileArr = file.listFiles(); for(File f : fileArr){ if(f.isDirectory()){//如果f是文件夹就递归,接着判断,这样就可以一直找下去,直到它是一个文件 System.out.println(f.getName()); print(f);// 参数变化。 }else{ System.out.println(f.getName());//如果是文件就输出它的名字 //f.delete();//这个操作完成的是删除文件 } } //file.delete();//要想删除文件夹,首先文件夹必须是空的 } }
下面我们要做的是文件过滤的操作,即把指定类型的文件找出来,这时我们要用到FileFilterd这个接口来完成这个功能,代码如下:
package day10.io; import java.io.File; import java.io.FileFilter; public class TestFileFilter { public static void main(String[] args) { File file = new File("d:\\myjava"); // 匿名内部类+回调方式,这种方式很常见,大多数都这么做 File[] fileArr = file.listFiles(new FileFilter(){// 参考Comparable接口。 @Override public boolean accept(File f) { if(f.getName().endsWith(".java")){//如果文件名的后缀是.java类型返回true return true; }else{ return false; } } });// 回调 for(File f : fileArr){//输出文件名 System.out.println(f.getName()); } } //我们可以用新建一个类的方法完成这个功能,也可以像上面那样 /*private static class MyFileFilter implements FileFilter{ @Override public boolean accept(File f) { if(f.getName().endsWith(".java")){ return true; }else{ return false; } } }*/ }