黑马程序员--Java之IO(输入输出)(下)04

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

黑马程序员–Java之IO(输入输出)(下)04

一、File类的简介

  File类用于封装一个路径,这个路径可以是从系统盘符开始的绝对路径,如:D:\file\a.txt,也可以是相对于当前目录而言的相对路径,如src\Hello.java。File类内部封装的路径可以指向一个文件,也可以指向目录。File类是将文件和文件系统封装成对象的一个类,它的实例技能代表某一特定文件,也能指代某一目录下所有文件的集合。封装操作文件和文件夹的方法。

File f=new File(“myDemo.txt”);
 //创建File对象,参数也可以是文件的绝对路径,如果没有提供路径名,则在当前目录创建
File dir=new File(“d:\mydemo”); // d盘下 mydemo 目录

分别声明了一个文件,和一个文件目录,指向File对象。
其中从File对象创建文件时需要调用File类createNewFile()方法,当指定文件名的文件不存在时,会创建一个此指定名的文件,如果已经存在,则不创建。而 mkdir() 可以创建此抽象路径名的指定目录。(mkdirs()可以创建多级目录)

File f=new File(“file.txt”); 
String create=f.createNewFile(); //创建File对象封装的路径名为文件名的文件,返回boolean 
File dir=new File(“”); 
dir.mkdir(); // 创建文件夹”kk” 父目录abc必须存在,”abc//kk”如果abc不存在,则kk不可能创建成功 
dir.mkdirs(): //创建多级目录”abc//fdsa//fdsafsad//fasfas//faf” 
也可以在指定目录创建具有指定名字的文件 
File f=new File(String path, String name); 

由于File类既可以指代特定文件,又可以指代某一目录。所以也可以如下表示:

File f= new File(File dir,String name): 
//我们可以通过isDirector()和isFile()方法来确定某一文件 
//对象到底是文件还是文件路径。

当File类对象存在时,可以通过调用exists()方法检查文件或者文件夹(目录)是否存在。存在则返回true,否则返回false。

File f = new File(“no exist”); 
String filePath=f.getAbsolutePaht(); //返回该文件的绝对路径 
boolean=f.exists(); 
String path =f.getpath(); // 返回包含该文件路径名的字符串
 “c:”+File.separator+”abc”+File.separator+”a.txt” 
 //系统分隔符的使用方法 相当于” c:\abc\a.txt”

delete()与deleteOnExit()的区别: deleteOnExit() 在对象创建完毕调用,在程序结束时删除,而delete()立刻删除文件,前面发生异常可能无法执行。

File f=new File(“file.txt”)
f.deleteOnExit()  
f.canExcute() //判断一个File对象能否被执行,并返回
boolean dir.isAbsolute()
//是否是绝对路径(“d://fdasf//fasfsd//fsdafsda”) 
String getAbsolutePath() //返回绝对路径的字符串表示  
getPath() //返回相对路径  
getParent() //如果没有明确的指明对象的父目录,该方法返回空,例如参数是相对路径, 
renameTo(File f)//相当于剪切重命名的效果 f1.renameTO(f2) //结果是f1改名并剪切到f2存在的目录下 
File[] files=File.listRoots()// 获取机器的盘符,返回File对象数组

二、查询目录列表

调用list()方法可以获得该文件目录下文件或者文件夹列表,并返回一个有文件名或者文件夹名组成的字符串数组。下列代码可以返回命令行 中输入的任意路径的文件列表

File dir=new File(args[0]); //ex: Java Demo D:\my java 
String [] fileNames=dir.list(); // 该目录必须存在
class Demo{
    public static vois main(String[],args){
        File dir=new File("c:\\abc"); 
        String[] arr=dir.list(new FilenameFilter();
        public boolean accept(File dir,String name) {
            //accept的返回值来判定是不是需要的文件,true为需要,
            //System.out.println("dir:"+dir+" name"+name);
            return( name.endsWith(".txt"));
        }
    } 
}
File[] listFiles() //返回这个File对象包含的文件和目录所对应的File对象构成的数组。
File dir = new File("C:\\abc");
File[] files=dir.listFiles();
for(File f:files){ 
    System.out.println(f.getName+"::"+f.length());
}//无法显示目录中子目录的文件

如何打开目录中子目录的文件?

class Demo{
    public static void main(String[] args){
        File dir=new File("d:\\abc");
        showDir(dir);
    }
    public static void showDir(File dir){
        File[] files=dir.listFile();
        for(int i=0;x<files.length();x++){
            if(files[i].isDirectory()){
                showDir(file[x]);
            }else{
                System.out.println(files[i].getName()); 
                 /* System.out.files[i]会返回封装的路径,封装相对路径则返回相对路径,封装绝对路径则返回绝对路径。*/
            }
        }
    }
}

如何删除一个带有内容的目录? 原理:从里往外删除

class RemoveDir{
    public static void main(String[] args){
        File dir=new File("d:\\abc");
        removeDir(dir);
    }
    public static void removeDir(File dir){
        File[] files=dir.listFiles();
        for(int i=0;i<files.length;i++){
            if(files[i].isDirectory()){
                removeDir(file[i]);
            }else{
                files[i].delete();
    //System.out.println(file[i].toString()+file[i].delete());
            }
        }
        System.out.println(dir+" dir "+dir.delete());
    }
}

将指定目录下满足某些要求的文件写入到一个新的文件中。
对指定目录递归,得到所有的Java文件路径,将这些路径存储到集合当中 ,将集合中的数据写入到一个文件之中 //所有的文件路径存放在一个.txt文件之中

class JavaFileList{
    public static void main(String[] args){
        File dir=new File("d:\\java123);
        List<File> list=new ArrayList<File>();
        fileToList(dir,list);
        System.out.println(list.size()); 
        File file=new File(dir,"java");
        writeToFile(list,file.toString());
    }
    public static void fileTolist(File dir,List<File> list) throw IOException{
        File[] files=dir.listFiles();
        for(File file :files){
            if(file.isDirectory()){
                fileTolist(file,list);
            }else{
            if(file.getName().endWith(".java" )){
                list.add(file);
            }
        } 
    }
}
    public static void writeToFile(List<File> list String javaListFile) throw IOException{
        BufferedWriter bufw=null;
        try{
            bufw=new BufferedWrite(new FileWriter(javaListFile)); 
            for(File f:list){
                String path=f.getAbsolutePath();
                bufw.write(path);
                bufw.newLine();
                bufw.flush();
        }catch (IOException e){
            throw e;
        }
        finally{
            try{
                if(bufw!=null)
                    bufw.close();
            }catch(IOException e){
                 throw e;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值