黑马程序员10_File
File类
知识点一:File类概述
将文件系统中的文件和文件夹封装成了对象。提供了更多的属性和行为可以对这些文件和文件夹进行操作。这些是流对象办不到的,因为流只操作数据。
知识点二:将已有的和为出现的文件或者文件夹封装成对象
形式1: File f =new File("c:\\abc.txt");
形式2-1:File f = new File("c:\\abc","b.txt");
形式2-2:File path = new File("c:\\abc");
File f3 = new File(path,"c.txt");
知识点三:File file = new File("D:/java/test.java"),其中file为封装的内容。
如
System.out.println(file);
知识点四:File.separator,跨平台的目录分隔符;使用如下:
"c:"+File.separator+"abc"+File.separator+"zzz"+File.separator+"
知识点五:File类常见方法:
-
1、创建
boolean createNexFile()
在指定位置创建文件,如果该文件已经存在,则不创建,返回false。注意得抛异常。和输出流不一样,输出流对象一建立就会创建文件,而且文件已经存在,会覆盖。
如:
public static void consMethod() throws Exception { File f =new File("d:\\java\\file.txt"); f.createNewFile();//创建f }
boolean mkdir():
创建文件夹。只能创建一级目录代码如:
public static void consMethod() throws Exception { File f =new File("d:\\java\\file"); f.mkdirs(); }
boolean mkdirs():
创建多级文件夹。
-
2、删除。
boolean delete():
删除失败返回false。如果文件正在被使用,则删除不了返回falsel。
如:
public static void method_1()throws IOException { File f = new File("file.txt"); print("delete:"+f.delete());//删除失败,因为没有建立,还不存在 } void deleteOnExit():
-
3、判断。
①boolean exists():
文件是否存在.例如:
public static void consMethod() throws Exception { File f =new File("d:\\java\\file.java"); print(f.exists());//返回true f.createNewFile(); }
②isFile():
是否为文件,记住在判断文件对象是否是文件或者目的时,必须要先判断该文件对象封装的内容是否存在。,
public static void consMethod() throws Exception { File f =new File("d:\\java\\bbb.java"); print(f.isDirectory());//结果为false print(f.isFile()); //false,因为没有创建 } public static void consMethod() throws Exception { File f =new File("d:\\java\\bbb.java"); f.createNewFile(); print(f.isDirectory()); print(f.isFile()); }
③isDirectory();
测试此抽象路径名表示的文件是否是一个目录。
④isHidden();
测试此抽象路径名指定的文件是否是一个隐藏文件。
⑤isAbsolute();
测试此抽象路径名是否为绝对路径名。
-
4、获取信息。
long length():获取文件大小。
getName():返回由此抽象路径名表示的文件或目录的名称。
getPath():将此抽象路径名转换为一个路径名字符串。
getParent():该方法返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。
如果相对路径中有上一层目录那么该目录就是返回结果。
getAbsolutePath() :得到绝对路径
long lastModified() :最后一次修改时间
练习:取有效盘符
File[] files = File.listRoots(); for(File f : files) { System.out.println(f); }
知识点六:listFiles()获取当前目录对象,包含隐藏文件
public static void consMethod() throws Exception { File f = new File("d:\\"); File[] files = f.listFiles(); for(File ff : files) { System.out.println(ff); } }
知识点七:list(),获取当前目录文件名称,包含隐藏文件夹及文件名称,该目录必须存在
public static void consMethod() throws Exception { File f = new File("d:\\"); String[] files = f.list(); for( String ff : files) { System.out.println(ff); } }
知识点八:list(FilenameFilter(过滤器接口) filter)
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。除了返回数组中的字符串必须满足过滤器外,此方法的行为与 list() 方法相同。如果给定 filter 为 null,则接受所有名称。否则,当且仅当在此抽象路径名及其表示的目录中的文件名或目录名上调用过滤器的 FilenameFilter.accept(java.io.File, java.lang.String) 方法返回 true 时,该名称才满足过滤器。 要求条件为重写FilenameFilter类中的accept方法。
例如:
返回指定目录下.mps文件。
public static void listDemo_2() { File dir = new File("f:\\"); String[] arr = dir.list(new my()); System.out.println("len:"+arr.length); for(String name : arr) { System.out.println(name); } } class my implements FilenameFilter { public boolean accept(File dir,String name) { return name.endsWith(".map3"); } } 或者由内部类简化: FilenameFilter dirs = new FilenameFilter(){ public boolean accept(File dir,String name){return name.endsWith(".class");} }; String[] filesss = new File("D:/java").list(dirs); for(String s:filesss){print(s);}
- 练习:
列出指定目录下文件或者文件夹,包含子目录中的内容。
因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。
在列出过程中出现的还是目录的话,还可以再次调用本功能。
也就是函数自身调用自身。
这种表现形式,或者编程手法,称为递归。
递归要注意:
1、限定条件。
2、要注意递归的次数。尽量避免内存溢出。
代码如下:
public static void showDir(File f) { File[] fs = f.listFiles(); for(int i=0;i<fs.length;i++) { if(fs[i].isDirectory()) { showDir(fs[i]); } print(fs[i]); } } 调用: File file = new File("e:\\"); showDir(file);
知识点九:删除一个带内容的目录
删除原理:
在window中,删除目录从里面往外删除的。
既然是从里往外删除。就需要用到递归。
代码如下:
import java.io.*; class RemoveDir { public static void main(String[] args) { File dir = new File("d:\\testdir"); removeDir(dir); } public static void removeDir(File dir) { File[] files = dir.listFiles(); for(int x=0; x<files.length; x++) { if(files[x].isDirectory()) removeDir(files[x]); else System.out.println(files[x].toString()+":-file-:"+files[x].delete()); System.out.println(dir+"::dir::"+dir.delete()); } }