File文件基本概述

File类,文件包括文件,和文件夹。流只能操作数据,不能操作文件夹

File基本方法

//new File(“a.txt”);把a.txt封装成一个对象,如果不存在这个文件,系统创建一个a.txt

File f1=new File(“a.txt”);//参数是String,注意a.txt是一个相对路径,绝对路径比如c:\\aaa\\a.txt

File F2=new File(“c:\\abc”,”b.txt”)//传递两个字符串,父路径+具体文件。功能其实和c:\\abc\\b.txt功能一样,不过可以在b.txt中传递一个变量

File d=new File(“c:\\abc”);

File d3=new File(d,”c.txt”)

 

知识点:sop方法是System.out.println()的缩写

public static voidsop(Object obj) {//sop方法就等控制台输出的简版,

       System.out.println(obj);

  }

定义一个静态方法 sop(),接收的参数是Object,当调用sop方法时,它就会执行他内部的语句System.out.println(obj);将传入的obj打印出来。

对于程序中每一次调用sop()的作用,其实就是为了每次需要打印结果时少写一句System.out.println()这句代码。sop的作用就等同于这句话。

sop(“s1=”+str)= System.out.println(“s1=”+str);

分隔符重点:new File(“c:aaa\\bbb\\a.txt”)

Windows 和Unix ,Linux系统默认分隔符不同 windows 下是\ unix.linux是/,但是代码中要加\转义字符,为了提高代码的可移植性,跨平台 可以用File.separator()

例如:new File(“c:aaa”+“File.separator()”+bbb +“File.separator()”+“a.txt”)

重点掌握的方法:创建一个文件:

 Boolean creatNewFile(); 创建一个文件注意返回值是boolean类型,用来判断是否创建了具体文件,如果第一次运行 sop(file.creatNewFile()) 返回打印true 第二次运行打印显示false 注意和输出流的区别,输出流管道对象创建以后,再次创建就会覆盖原来的文件。

删除文件:delete(); 第一次删除返回true 第二次删除返回false

Void  deleteOnExit(); 程序运行当jvm退出时,自动删除标记的文件对象;

例如:File f=new File(“a.txt”)

f.deleteOnExit();

判断:boolean exists(); 判断文件是否存在,new File(“a.txt”)

IsFile()//false,加f.creatNewFIle(),返回true,

IsDirectory(); // new File(“aaa”),f.madir(),创造一级文件夹,new File(“d:\\a\\aa”),f.madirs().创建多级目录

IsHidden()//是否为隐藏文件,并不是所有的文件流都可以读取,虽然字节流可以读取大部分的文件,但是c盘中一个system隐藏的文件不能读取,一般软件开发都要判断是否为隐藏文件,如果不判断,读取文件,不论是否隐藏都可以被读取。

IsAbsoulte();//是否为抽象路径 d:\\aa\\bb\\c.txt返回true

获取信息:

例如:File f1=new File(“c:\\a.txt”)  返回是String类型 获取抽象路径名表示文件,或者文件夹,f1.getName(),获取文件名字

File f2=new   File(“d:\\ct.txt”) 获取抽象路径名字f2.getPath();返回字符串类型

F2.getPatent():获取父目录文件夹\\

GetPath()有可能获取的是抽象路径名字:new File(“d:\\aaa\bbb\c.txt”) \\此时f2.getPath()获取的就是抽象路径,也是绝对路径

F2.getAbsolutePath()=f.getParent()+f.getName():获取抽象路径名字,例如c:\\aaa\test.java

返回类型是long类型 lastModified();最后修改时间。

文件

Boolean renameTo(File file)方法

例如:File f1=new File(“c:\\a.txt”)

File f2=new File(“d:\\b.txt”):

F1.renameTo(“d:\\b.txt”);

方法 listRoots() 静态方法,没有对象,返回一个File 数组;

package 文件;

importjava.io.*;

/*

 * 目标打印出盘下的所有文件*/

public classtest01 {

       publicstatic void main(String[] args) {

              //fieltest();

              dayinpanfu();

}

   publicstatic void fieltest(){

          File f=new File("d:\\");//打印出包括隐藏文件内的所有文件

             

              String[]f1=f.list();//注意返回类型是字符数组类型

              for(Stringf2:f1)

              {

                     System.out.println(f2);

              }

   }

  

   publicstatic void dayinpanfu(){

          File []f=File.listRoots();//打印根路径盘符,返回文件类型

          for(File f2:f)//f2获得盘符,把盘符传递给文件对象

                

          {

                 System.out.println(f2);

                   Filef3=new File(f2.toString());//打印出包括隐藏文件内的所有文件

                    

                     String[]f1=f3.list();//注意返回类型是字符数组类型

                     for(Stringf4:f1)

                     {

                            System.out.println(f4);

                     }

          }

         

   }

}

获取文件对象listFiles();返回File[]数组类型

package 文件;

importjava.io.*;

/*

 * 需求分析:

 * 获取d:\\Test文件夹下文件名字,路径,长度

 * listFiles(),返回文件数组*/

public class listFIles {

 

    public static void main(String[] args) {

f=new File("d:\\Test");

f1=f.listFiles();//获取子类文件对象,比获取字符数组 list,有优势,通过获取文件对像就可以获取,文件名字,文件路径,文件长度

        for(File d2:f1)

//打印出子文件名字,路径,长度

            System.out.println("文件名字="+d2.getName()+"文件路径"+d2.getAbsolutePath()+"文件长度"+d2.length());

        }

    }

}

递归调用,实现输出一个文件夹中所有文件

package 文件;

importjava.io.*;

/*

 * 便利出d:\\Temp下子文件,和文件下的子文件,和目录

 * 思路:把一个文件夹,用listFiles();方法存到一个文件数组中,对这个文件数组中每一个文件进行判断,如果是文件就打印,如果是文件夹

 * 递归调用show函数,传递给show函数参数是一个文件夹*/

public class 递归求目录文件 {

 

    public static void main(String[] args) {

f=new File("d:\\TempFile");

        show(f);

    }

   

    public static void show(File f){

        System.out.println(f);

f1=f.listFiles();//文件夹子文件存到文件数组中

        for(int i=0 ;i<f1.length;i++)

           

        {

            if(f1[i].isDirectory())//递归调用,当时文件夹时

               

                show(f1[i]);

            else System.out.println(f1[i]);//文件打印

        }

    }

}

 

/*

 * public static void main(String[] args){

        File f=newFile("d:\\TempFile");

        show(f);

       

    }

    public static void show(File file){

       

        File []f2=file.listFiles();

        for(File f3:f2)

        {   System.out.println(f3);

            if(f3.isDirectory())

                show(f3);

            else System.out.println(f3);

        }

    }*/

 

 

//java实现文件夹删除

 

 

 

/*

删除一个带内容的目录。

删除原理:

在window中,删除目录从里面往外删除的。

 

既然是从里往外删除。就需要用到递归。

 

 

 

*/

import java.io.*;

class RemoveDir

{

       publicstatic void main(String[] args)

       {

             

              Filedir = new File("d:\\testdir");

              removeDir(dir);

       }

 

       publicstatic void removeDir(File dir)

       {

              File[]files = dir.listFiles();

             

              for(intx=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());

       }

 

}

 

 

//文件过滤器(作用)过滤指定文件名保留我们需要的

List(FilenameFilter 参数)//实现具体FilenameFilter接口的accept方法

例如:

package 文件;

importjava.io.*;

/*

 *1: list方法参数实现具体FilenameFilter的accept方法

 *1:list方法参数传递一个FilenameFilter或者其子类的对象

 *2:创建实现接口FilenameFilter接口的类,或者实现其接口的子类

 *3:实现public boolean accept(Fiel fiel,Stringname)方法

 *该方法将制定File的所有子文件夹,目录进行迭代,如果返回true则该方法,就会列出该子目录

 *或者文件夹

 * */

public class FilenameFilterTest {

 

    public static void main(String[] args) {

fp=new File("d:\\Test");

filename=fp.list(new MyFilenameFilter());

/*

         *注意这里不能用for(inti=0;i<filename.length;i++)

         *syso ctro+/

         *不是所有的子文件,或者文件佳都是以.java结尾的,可能导致数组越界异常*/

        for(String name :filename)

             System.out.println(name);

/*

         *或者是增强for循环,for(String name :filename)

         *syso(name)*/

       

    }

}

/*实现过滤器的FilenameFilter的accept方法*/

classMyFilenameFilter implements FilenameFilter{

    public boolean accept(File filename,String name)

    {

        return name.endsWith(".java");

    }