------------android培训、java培训、期待与您交流! -------------
知识点总结
1、File类的由来、三种常见的构造方法。
文件也有自己对应的属性信息,比如所在目录、文件类型、大小、建立修改日期。Java通过面向对象的方法对其进行封装,方便对其进行操作。
File(String pathname)
File(File parent ,String child)
File(String parent,String child)
2、File的几种操作方法:创建、判断、删除、获取信息。
1,创建。
boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。
boolean mkdir():创建文件夹。
boolean mkdirs():创建多级文件夹。
2,删除。
boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回falsel。
void deleteOnExit();在程序退出时删除指定文件。解决了在占用文件时删除不 了的问题。
3,判断。
boolean exists() :文件是否存在.非常常用。
isFile():【注意】:在判断文件对象是否是文件或者目录时,
亦一般要先通过exists先判断文件对象封装内容是否存在。
isDirectory();
isHidden();
isAbsolute();
4,获取信息。
getName():
getPath():
getParent()://只要没有明确指定父目录,返回为空;
否则返回文件的父目录(上级目录)
String getAbsolutePath();//返回绝对路径,字符串类型
File getAbosoluteFile();返回对象
long lastModified() //返回最近一次修改时间
long length() //返回该文件的长度
5.设置
public boolean renameTo(File dest)
重新命名此抽象路径名表示的文件。
可以将文件从一个目录转移到另一个目录。
但是,重命名操作无法将一个文件从一个文件系统移动到另一个文件系统,
该操作不是不可分的,如果已经存在具有目标抽象路径名的文件,那么该操作可 能无法获得成功。应该始终检查返回值,以确保重命名操作成功。
6、列出内容:public String[]list(); 只传入实现FileNameFilter接口的对象
列出内容:public File[]listFiles(),既可以传入FileNameFilter,又可以传FileFilter
FileNameFilter 中只有 booleanaccept(File dir, String name) 方法
测试指定文件是否应该包含在某一文件列表中。
FileFilter 中只有 booleanaccept(File pathname)
测试指定抽象路径名是否应该包含在某个路径名列表中。
- 示例代码:
- public class FileDemo2 {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- listDemo();
- listDemo1();
- listDemo_2();
- }
- public static void listDemo()
- {
- File f = new File("D:\\JAVA\\code");
- String[] names = f.list();//调用list方法的file对象必须是封装了一个目录。该目录还必须存在。
- for(String name : names)
- {
- System.out.println(name);
- }
- }
- public static void listDemo_2()
- {
- File dir = new File("d:\\java\\code");
- String[] arr = dir.list(new FilenameFilter()
- {
- public boolean accept(File dir,String name)
- {
- return name.endsWith(".java");
- }
- });
- System.out.println("len:"+arr.length);
- for(String name : arr)
- {
- System.out.println(name);
- }
- }
- public static void listDemo1(){
- File dir = new File("d:\\java\\code");
- File [] arr = dir.listFiles(new FilenameFilter(){
- public boolean accept(File dir,String name){
- return name.endsWith(".java");
- }
- });
- for(File f :arr){
- Print.sop(f);
- }
- }
- }
3、列出指定目录下文件或者文件夹,包含子目录中的内容。
也就是列出指定目录下所有内容。
因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。
在列出过程中出现的还是目录的话,还可以再次调用本功能。
也就是函数自身调用自身。
这种表现形式,或者编程手法,称为递归。
递归要注意:
1,限定条件。
2,要注意递归的次数。尽量避免内存溢出。
- public class ListFileDemo {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- File f = new File("d:"+File.separator+"java");
- getFile(f,0);
- }
- public static void getFile(File f,int level){
- if(!f.exists())//先判断文件或目录是否存在
- new IOException("找不到文件");
- if(f.isDirectory()){ //判断是不是目录
- File[] files = f.listFiles();//是就获取目录下的文件
- for(File f1 : files){
- if(f1.isDirectory()){ //在循环目录的过程中判断是否还是目录,是 //的话递归调用本方法
- level++;
- getFile(f1,level);
- }
- System.out.println(getLevel(level)+f1);//不是目录就打印
- }
- }
- System.out.println(getLevel(level)+f);//不是目录就打印
- }
- //获取层级目录,打印出层次效果,毕老师想的,牛!
- public static String getLevel(int level){
- StringBuilder sb = new StringBuilder();
- sb.append("|--");
- for(int x =0; x<level; x++)
- {
- sb.insert(0,"| ");
- }
- return sb.toString();
- }
- }
4、删除一个带内容的目录
- /*
- 删除一个带内容的目录。
- 删除原理:
- 在window中,删除目录从里边往外面删除的。
- 既然是从里边往外删除,就需要用到递归。
- */
- import java.io.*;
- class RemoveDir
- {
- public static void main(String[] args)
- {
- File dir =new File("b:\\bxd");
- removeDir(dir);
- }
- //java删除是不走回收站的
- public static void removeDir(File dir)
- {
- File[] files =dir.listFiles();
- //删除目录中的内容
- for(int x =0; x<files.length; x++)
- {
- //java不能访问隐藏文件,所以遍历的时候最好判断下 //(!files[x].isHidden())&&files[x].isDirectory()
- if(files[x].isDirectory())
- removeDir(files[x]);
- else
- sop(files[x]+":-file-:"+files[x].delete());
- }
- //删除目录
- sop(dir+"::del::"+dir.delete());
- }
- public static void sop(Object obj)
- {
- System.out.println(obj);
- }
- }