Java 本地文件操作

File类简介

  • File 类用来代表文件或文件夹,通过 File 类,可以对文件与文件夹进行丰富的操作,并且可以获取文件的路径、大小、文件名等信息。

文件的创建、删除、重命名

  • 通过文件类的 createNewFile() 方法创建文件
  • 通过 delete() 方法删除文件
  • 使用 renameTo() 方法重命名文件,renameTo() 方法时依靠另一个 File 对象来重命名。
public class FileTest {

    public static void main(String[] args) {
        // 创建文件对象
        File file = new File("Hello File.txt");
        File file2 = new File("newHello.txt");
        try {
            file.createNewFile();  //创建文件
            System.out.println("创建文件成功");
        } catch (IOException e) {
            System.out.println("创建文件失败");
        }
        file.renameTo(file2);  //文件重命名
    }
}

文件夹的创建、删除、重命名

  • 通过 mkdir() 与 mkdirs() 方法创建文件夹:如果想创建一层接着又一层的文件夹,则用 mkdirs() 方法,自动补全中间的文件夹。
  • 通过 delete() 方法删除文件夹
  • 使用 renameTo() 方法对文件夹重命名
public class FileTest {

    public static void main(String[] args) {
        // 创建文件夹对象
        File floder = new File("Hello floder");
        File floder1 = new File("new floder/one/two/three/main");
        File floder2 = new File("new Hello fioder");
        if(floder.mkdir()){  
            //mkdir() 方法返回的是boolean类型值,所以可以做判断是否创建成功
            System.out.println("文件夹创建成功");
        }else if(floder.exists()){
            //exists()方法为判断是否存在当前文件夹,返回bollean值类型
            System.out.println("文件夹以存在,不用创建");
        }else {
            System.out.println("创建文件夹失败");
        }
         // mkdirs()方法自动完成one two three main 文件夹的创建
        floder1.mkdirs(); 
        floder.renameTo(floder2);//重命名文件夹
        //floder.delete(); //删除该文件夹
        
    }    
}

文件属性的读取

  • exists() 方法判断文件是否存在
  • getName() 方法读取文件名称
  • getPath() 方法读取文件路径
  • getAbsolutePath() 方法读取文件的绝对路径
  • getParent() 方法读取父级路径
  • length() 方法读取文件大小
  • isHidden() 方法读取文件是否被隐藏
  • canRead() 方法判断文件是否可读
  • canWrite() 方法判断文件是否可写
  • isDirectory() 方法判断文件是否为文件夹
public class FileTest2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File file = new File("floder/Hello.txt");
        
        //判断文件是否存在
        System.out.println("文件是否存在:"+file.exists());
        //读取文件名称
        System.out.println("文件的名称 :"+file.getName());
        //读取文件路径
        System.out.println("文件的路径:"+file.getPath());
        //读取文件绝对路径
        System.out.println("文件的绝对路径:"+file.getAbsolutePath());
        //读取文件父级路径
        System.out.println("文件的父级路径:"+file.getParent());
        //读取文件大小
        System.out.println("文件的大小:"+file.length());
        //判断文件是否被隐藏
        System.out.println("文件是否被隐藏:"+file.isHidden());
        //判断文件是否可读
        System.out.println("文件是否可读:"+file.canRead());
        //判断文件是否可写
        System.out.println("文件是否可写:"+file.canWrite());
        //判断文件是否为文件夹
        System.out.println("判断是否为文件夹:"+file.isDirectory());
    }
}

文件属性的设置

  • setWritable() 方法设置文件是否可写
  • setReadable() 方法设置文件是否可读
  • setReadOnly() 方法设置文件只读
public class FileReadWrite {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File file = new File("floder/Hello.txt");
        //设置文件可写
            file.setWritable(true);
        //设置文件可读
            file.setReadable(true);
        //设置文件为只读
            file.setReadOnly();
    }

遍历文件夹

  • 通过使用 listFile() 方法获取文件夹中的所有项目,包括文件和文件夹。查看 listFile() 方法可以发现其返回的是一个文件类型的数组。
  • 以下例子将利用递归思想实现文件夹的遍历
public class FileScaner {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        scanerFile(new File("E:/study_Java"),1);
    }
    public static void  scanerFile(File dir,int tab) {
        if (dir.isDirectory()) {//判断是否为文件夹
            //将该文件夹下所有的文件及文件夹存入数组中
        File nextDir[]= dir.listFiles(); 
        for (int i = 0; i < nextDir.length; i++) {
            // 这个for循环为了增强输出格式的可读性
            for (int j = 0; j < tab; j++) {
                System.out.print("|--");
            }
            //输出文件及文件夹名
            System.out.println(nextDir[i].getName());
            if (nextDir[i].isDirectory()) {
                //如果为文件夹,则递归调用sannerFile
                scanerFile(nextDir[i],tab+1);
            }
        }
        }
    }
}

文件的简单读写

  • I/O 流中有文件的输入输出类
  • FileInputStream 继承 InputStream,可以通过其创建文件字节输入流; FileOutputStream 继承 OutputStream,可以通过其创建文件字节输出流
  • 通过 InputStreamReader 类创建字符输入流;通过 OutputStreamReader 类创建字符输出流
  • 通过 BufferReader 类创建数据缓冲流,再使用 readLine() 方法获取缓冲流的数据
  • 具体实现分析一下代码
public class ReadWriteTextFile {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        readFile(new File("floder/Hello.txt"));
        writeFile(new File("floder/HelloWrite"));
    }

    public static void readFile(File file) {
        
        try {
            //创建文件字节输入流
            FileInputStream fis = new FileInputStream(file);
            //创建字符输入流
            InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
            //创建缓冲流
            BufferedReader br = new BufferedReader(isr);
            
            String line ;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
            br.close();
            isr.close();
            fis.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }    
    }
    
    public static void writeFile (File file) {
        try {
            //创建文件输出流
            FileOutputStream fos = new FileOutputStream(file);
            //创建字符输出流
            OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
            //创建输出缓冲流
            BufferedWriter bw = new BufferedWriter(osw);
            
            osw.write("宣州谢朓楼饯别校书叔云\n");
            osw.write("弃我去者,昨日之日不可留;\n");
            osw.write("乱我心者,今日之日多烦忧。\n");
            osw.close();
            osw.close();
            fos.close();
            
         } catch (FileNotFoundException e) {
            e.printStackTrace();
         } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
         } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、流的概念和作用。 流是一种有顺序的,有起点和终点的字节集合,是对数据传输的总成或抽象。即数据在两设备之间的传输...
    布鲁斯不吐丝阅读 10,085评论 2 95
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,860评论 18 139
  • 之所以写这个是因为Hadoop的IO与·这个类似 但要比这个深入,而且都还涉及到网络传输原理的五个层次。所以,一...
    起个什么呢称呢阅读 1,032评论 0 6
  • 今天看《结构思考力》二三章。 第二章 基于目标定主题 本章主要说,要想让表达有的放矢,就要先确定目标。因为目标可以...
    米小喆阅读 221评论 0 0