java基础IO流--file类

一、File类概述
1、File类:文件和目录路径名的抽象表现形式
2、特点:
1)用来将文件或文件夹封装成对象
2)方便于对文件与文件夹的属性信息进行操作
3)File类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变
4)File对象可以作为参数传递给流的构造函数

二、File对象创建
方式一:
File f =new File(“a.txt”);
将a.txt封装成File对象。可以将已有的和未出现的文件或者文件夹封装成对象。
方式二:
File f2=newFile(“c:\abc”,”b.txt”);
将文件所在目录路径和文件一起传入,指定文件路径。
方式三:
File d=new File(“c:\abc”);
File f3=new File(d,”c.txt”);
将文件目录路径封装成对象。再创建文件对象。降低了文件于父目录的关联性。
小知识:
File.separator表示目录分隔符,可以跨平台使用。相当于路径中的“\”(双斜杠\在windows中表示表示转义后的分隔符,但是在linux系统中就不是)。

三、File类的常见方法
1、创建
booleancreateNewFile();
//在指定位置创建文件,如果该文件已经存在,则不创建,返回false。和输出流不一样,输出流对象一建立就创建文件。而且文件已经存在,会覆盖。
boolean mkdir();//创建文件夹,只能创建一级文件夹
例:
File dir=new File(“abc”);
dir.mkdir();//创建abc这个文件夹
boolean mkdirs();//创建多级文件夹
2、删除
boolean delete();
//删除文件或目录。文件存在,返回true;文件不存在或者正在被执行,返回false。
void deleteOnExit();//在程序退出时删除指定文件
3、判断
boolean canExecute();//是否是可执行文件
boolean exists();//文件是否存在
boolean isFile();//是否是文件
boolean isDirectory();//是否是文件夹
boolean isHidden();//是否是隐藏文件
boolean isAbsolute();//文件是否是绝对路径
记住:在判断文件对象是否是文件或者目录时,必须要判断该文件对象封装的内容是否存在。通过exists判断。
4、获取信息
String getName();//获取文件名
String getPath();
//获取文件的相对路径(即创建的对象传入的参数是什么就获取到什么)
String getParent();
//获取文件父目录。返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。如果相对路径中有上一层目录,那么该目录就是返回结果。
String getAbsolutePath();//获取文件的绝对路径
long lastModified();//返回文件最后一次被修改的时间
long length();//返回文件长度
5、列出文件及文件过滤
static File[] listRoots();//列出可用的文件系统根目录,即系统盘符
String[] list();
//列出当前目录下所有文件,包括隐藏。调用list方法的file对象必须是封装了一个目录。该目录还必须存在。
String[]list(FilenameFilter filter);
//返回一个字符串数组,获取目录中满足指定过滤器的文件或目录。
//FilenameFilter:文件名过滤器,是一个接口,其中包含一个方法,accept(Filedir,String name),返回的是boolean型,对不符合条件的文件过滤掉。
File[] listFiles();//返回一个抽象路径名数组,获取当前文件夹下的所有文件和文件夹
File[] ListFiles(FilenameFilterfilter);//返回抽象路径名数组,获取目录中满足指定过滤器的文件或目录。
示例一:

       package fileDemo;

import java.io.File;
import java.io.IOException;

public class FileDemo01 {

    public static void main(String[] args) throws IOException {

        method_4();

    }
    //重命名reName
    public static void method_4(){
        File f1=new File("F:\\demo.txt");
        File f2=new File("F:\\demo11.txt");
        System.out.println(f1.renameTo(f2));
    }


    //获取信息
    public static void method_3(){
        File f=new File("F:\\demo.txt");
        //获取路径
        System.out.println("path:"+f.getPath());
        //获取绝对路径
        System.out.println("Absolutepanth:"+f.getAbsolutePath());
        //获取时间
        System.out.println("时间:"+f.lastModified());
        //获取长度
        System.out.println("length:"+f.length());
    }


    //判断
    public static void method_2(){
        File f=new File("F:\\demo.txt");
        //判断是否存在文件 exists(),在判断之前必须用它来判断文件是否存在
        System.out.println("f:"+f.exists());
        //判断是不是文件isFile()
        System.out.println("f:"+f.isFile());
        //判断是否为隐藏isHidden
        System.out.println("f:"+f.isHidden());
        //判断是否为绝对路径isAbsolute()
        System.out.println("f:"+f.isAbsolute());
    }


    //创建,删除文件
    public static void method_1() throws IOException{
        File f=new File("F:\\file.txt");
        //创建文件
        //System.out.println("File="+f.createNewFile());
        //删除文件
        //f.deleteOnExit();告诉虚拟机运行完文件以后删除
        System.out.println("delete="+f.delete());
    }

    //创建File对象
    public static void consMethods(){
        //将a.txt封装成File对象,可以将已有的和没有的文件或文件夹封装成对象
        File f1=new File("F:\\a.txt");
        File f2=new File("F:\\abc", "a.txt");

        File d=new File("F:\\abc");
        File f3=new File(d, "a.txt");
        //跨平台分隔符File.separator
        File f4=new File("F:"+File.separator+"abc"+File.separator+"a.txt");
        System.out.println("f1="+f1);
        System.out.println("f2="+f2);
        System.out.println("f3="+f3);
        System.out.println("f4="+f4);
    }

}

示例二:

package fileDemo;

import java.io.File;
import java.io.FilenameFilter;

public class FileDemo02 {


    public static void main(String[] args) {
        //ListRootsDemo();
        //listDemo_2();
         listFilesDemo();
    }
    public static void listFilesDemo(){
        File f=new File("F:\\");
        File[] flies=f.listFiles();
        for (File file : flies) {
            System.out.println(file.getName()+"::"+file.length());
        }
    }
    public static void listDemo_2(){
        File dir=new File("F:\\");
        String[] files=dir.list(new FilenameFilter() {

            public boolean accept(File dir, String name) {
                return name.endsWith(".txt");
            }
        });
        for (String file : files) {
            System.out.println(file);
        }
    }
    public static void listDemo(){
        File f=new File("F:\\");
        String[] names=f.list();//调用list方法的File对象必须是封装的一个目录,该目录还必须存在
        for (String name : names) {
            System.out.println(name);
        }
    }

    public static void ListRootsDemo(){
        File[] files=File.listRoots();
        for (File file : files) {
            System.out.println(file);
        }
    }

}

四、递归
1、定义
当函数内每一次循环还可以调用本功能来实现,也就是函数自身调用自身。这种表现形式,或者编程手法,称为递归。
2、递归注意事项
a、限定条件。是来结束循环调用,否则是死循环。
b、注意递归的次数,尽量避免内存溢出。因为每次调用自身的时候都会先执行下一次调用自己的方法,所以会不断在栈内存中开辟新空间,次数过多,会导致内存溢出。

示例一:

  package fileDemo;

import java.io.File;

public class FileDemo03 {

    public static void main(String[] args) {
        dirshow(new File("E:\\学习资料"),0);
    }
    public static String getlevel(int level){
        StringBuilder sb = new StringBuilder();
        sb.append("|--");
        for (int i = 0; i <level; i++) {
            sb.insert(0, "| ");
        }
        return sb.toString();
    }
    //打印目录中的目录文件对象
    public static void dirshow(File dir,int level){
        File[] f=dir.listFiles();
        System.out.println(getlevel(level)+dir);
        level++;
        for (File file : f) {
            if (file.isDirectory()) {
                dirshow(file,level);
            } else {

                System.out.println(getlevel(level)+file);
            }
        }
    }

}

示例二:

package fileDemo;

import java.io.File;

public class Removedir {

    /**
     * 删除目录文件
     * 从里往外删除必须用递归
     * 不走回收站
     * @param args
     */
    public static void main(String[] args) {
        File dir=new File("F:\\新建文件夹");
        removedir(dir);
    }
    public static void removedir(File dir){
        File[] f=dir.listFiles();
        for (File file : f) {
            if (!file.isHidden()&&file.isDirectory()) {
                removedir(file);
            }
            System.out.println(file.toString()+"---"+file.delete());
        }
        System.out.println(dir.toString()+"::"+dir.delete());
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值