IO流中的File类

File类是java.io代表与平台无关的文件和目录,也就是说,如果希望在程序中操作文件和目录,都可以通过File类来完成。
但是File类只能新建,删除,重命名文件和目录,并不能访问文件内容本身。
如果需要访问文件内容本身,则需要使用输入输出流

File类常见方法

  1. 创建。

    boolean createNewFile():在指定目录下创建文件,如果该文件已经存在,则不创建。
    在createNewFile()函数前面都会有一行创建File类对象的代码:
    File file=new File(“file.txt”);
    boolean b=file.createNewFile();
    boolean mkdir():试图创建一个File对象所对应的目录,如果创建成功,则返回true。
    调用该方法时File对象必须对应一个路径而不是一个文件。
    File dir=new File(“abc”);
    boolean a=dir.mkdir();
    boolean mkdirs():创建多级目录。
    调用该方法时File对象对应一个路多级径而不是一个文件。
    File dirs=new File(“abcd\f\d\hh\w\t\s”);
    boolean c=dirs.mkdirs();

  2. 删除。

    boolean delete():删除File对象所对应的文件或路径。
    void deleteOnExit():注册一个删除钩子,指定当Java虚拟机退出时,删除File对象所对应的文件和目录。
    注意:在删除文件夹时,必须保证这个文件夹里没有任何内容,才可以用delete来删除文件夹,否则就会删除失败,因为Windows删除文件是从里往外进行的。

  3. 获得。

    long length():获取文件大小。
    String getName():返回由此抽象路径名表示的文件或目录的名称。    
    String getPath():将此抽象路径名转换为一个路径名字符串。
    String getAbsolutePath():返回此抽象路径名的绝对路径名字符串。
    String getParent():返回此抽象路径名父目录的抽象路径名,如果此路径名没有指定父目录,则返回 null。
    long lastModified():返回此抽象路径名表示的文件最后一次被修改的时间。
    File.pathSeparator:返回当前系统默认的路径分隔符,windows默认为 “;”。
    File.Separator:返回当前系统默认的目录分隔符,windows默认为 “\”。

  4. 判断

    boolean exists():判断File对象所对应的文件或目录是否存在。
    boolean isDirectory():判断File对象所对应的是否是目录,而不是文件。
    boolean isFile():判断File对象所对应的是否是文件,而不是目录。
    boolean isAbsolute():判断File对象所对应的文件或目录是否是绝对路径。该方法消除了不同平台的差异。可以直接判断File对象是否为绝对路径。
    在UNIX/Linux/BSD等系统上,如果路径名开头是一条斜线(/),则表明该File对象对应一个绝对路径;在Windows等系统上,如果路径开头是盘符,则说明他是一个绝对路径。

  5. renameTo()

    renameTo():可以完成修改文件名和移动文件的功能
    后面有详细讲解


File类常用方法的代码实现

   public static void isDemo() {
        File f=new File("a.txt");
        boolean b=f.exists();
        System.out.println("b="+b);
        boolean b1=f.isFile();
        System.out.println("b1="+b1);
        boolean b2=f.isDirectory();
        System.out.println("b2="+b2);


    }

    public static void creatAndDelete() throws IOException {

        File dirs=new File("abcd\\f\\d\\hh\\w\\t\\s");
        boolean c=dirs.mkdirs();
        System.out.println(c);
        //删除成功是因为从里向外删除只删除了最里层的s文件夹
        boolean c1=dirs.delete();
        System.out.println(c1);



        //如果创建的文件夹里面创建有子文件便不能删除文件夹
        //因为Windows的删除是从里向外进行的
        File dir=new File("abc");
        boolean a=dir.mkdir();
        System.out.println(a);
        boolean a1=dir.delete();
        System.out.println(a1);

        //如果文件不存在。进行创建。如果文件存在,不进行覆盖
        File file=new File("file.txt");
        boolean b=file.createNewFile();
        System.out.println(b);

        boolean b1=file.delete();
        System.out.println(b1);

    }

    private static void getDemo() {
        File file =new File("a.txt");

        String name=file.getName();
        String abspath=file.getAbsolutePath();
        String path=file.getPath();
        long len=file.length();
        long time=file.lastModified();

        System.out.println("name:"+name);
        System.out.println("abspath:"+abspath);
        System.out.println("path:"+path);
        System.out.println("len:"+len);

        System.out.println("time:"+time);
        //将最后衣蛾次创建时间转化成格式化时间
        Date date=new Date(time);
        DateFormat dateformat=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
        String str_date=dateformat.format(date);
        System.out.println("str_date:"+str_date);

    }

File类的重点之list(),listFiles()

String[] list():列出File对象的所有子文件和路径名,返回String数组。
File[] listFiles():列出File对象的所有子文件和路径,返回File数组。
static File[] listRoots():列出系统所有的根路径。这是一个静态方法,可以直接通过File类来调用。

public static void main(String[] args) {
        //以当前路径来创建一个File对象
        File file1=new File("c:\\");
        //使用list()方法列出当前路径下的所有文件和路径
        String[] fileList=file1.list();
        for(String fileName:fileList){
            System.out.println(fileName);
        }


        //以当前路径来创建一个File对象
        File file2=new File("c:\\");
        //使用listFiles()列出当前路径下的所有路径和文件
        File[] names=file2.listFiles();
        for(File fileName:names){
            System.out.println(fileName);
        }


        //listRoots()静态方法列出所有的磁盘根路径
        File[] roots=File.listRoots();
        for(File root:roots){
            System.out.println(root);
        }
    }

上面三个代码块中第一个和第二个几乎是一个意思,只不过表现形式不同。


实现FilenameFilter接口的文件过滤器

有时候我们并不需要将全部的list()列表里的文件列出来,只需要列我们需要的文件,比如.java文件或者.txt文件。怎么才能把它们筛选出来呢,这就用了到文件过滤器。
在File类的list()方法中可以接受一个FilenameFilter参数,通过该参数可以只列出符合条件的文件。这里的FilenameFilter接口和javax.swing.filechooser包下的FileFilter抽象类的功能非常相似,可以把FileFilter当成FilenameFilter的实现类。
FilenameFilter接口里包含了一个accept(File dir,String name)方法,该方法将依次对指定File的所有子目录或者文件进行迭代。

File的list()方法的过滤器实现的是FilenameFilter接口
而File的listFiles()方法的过滤器实现的是FileFilter接口

  1. 普通代码。
private static void demo2() {
        File file=new File("c:\\");
        File[] names=file.listFiles(new FilterByHidden());
        for(File name:names)
        {
            System.out.println(name);
        }


    }

    private static void demo1() {
        File file=new File("c:\\");
        String[] names=file.list(new FilterByJava());
        for(String name:names)
        {
            System.out.println(name);
        }

    }
public class FilterByJava implements FilenameFilter{
    public boolean accept(File dir,String name){
        return name.endsWith(".java");
    }
}
public class FilterByHidden implements FileFilter {

    @Override
    public boolean accept(File pathname) {

        return !pathname.isHidden();
    }

}

2.增强版代码

public static void demo3() {
        File file=new File("c:\\");
        String[] names=file.list(new SuffixFilter(".txt"));
        for(String name:names)
        {
            System.out.println(name);
        }

    }
public class SuffixFilter implements FilenameFilter{
    private String suffix;
    public SuffixFilter(String suffix){
        super();
        this.suffix=suffix;
    }
    public boolean accept(File dir,String name){
        return name.endsWith(suffix);
    }
}

列出所有文件及其子文件的代码实现

public class Nothing {
    public static void main(String[] args){
        File dir=new File("D:\\MySQL");
        listAll(dir,0);
    }
    private static void listAll(File dir,int level){
        System.out.println(getSpace(level)+dir.getName());
        level++;
        File[] file=dir.listFiles();
        for(int x=0;x<file.length;x++){
            if(file[x].isDirectory()){
                listAll(file[x],level);
            }
            else{
                System.out.println(getSpace(level)+file[x].getName());
            }
        }
    }
    private static String getSpace(int level){
        StringBuilder sb=new StringBuilder();
        for(int x=0;x<level;x++){
            sb.append("   ");
        }
        return sb.toString();
    }
}

这里运用了递归知识点


renameTo()

public class Exercise {  

  public static void main(String args[]) {  
    // Old file  
    File oldFile = new File("/home/zjz/Desktop/myFile.txt");  
    // new file  
    File newFile = new File("/home/zjz/Desktop/myNewFile.txt");  
    /* renameTo() return boolean value 
    It return true if rename operation is successful 
     */  
    boolean flag = oldFile.renameTo(newFile);  
    if (flag) {  
      System.out.println("File renamed successfully");  
    } else {  
      System.out.println("Rename operation failed");  
    }  
  }  

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值