Java中的文件操作(File类)


Java中主要通过File类进行对文件的抽象描述,但是有File类并代表文件是真实存在的。

File类概述

FIle类是java.io.File包下的类,我们先来看File类的中的常见属性、构造方法和方法。

属性

修饰符及类型属性说明
static StringpathSeparator依赖于系统的路径分隔符,String类型的表示
static charpathSeparator依赖于系统的路径分隔符,char类型的表示

构造方法

签名说明
FIle(FIle parent,String child)从父路径和子路径名字创建新的FIle实例
FIle(String pathname)通过给定的字符串转换为路径来创建FIle实例,路径可以是相对路径也可以是绝对路径

什么是绝对路径和相对路径:
https://blog.csdn.net/qq_59599094/article/details/129831107

/** File实例的创建
         * 这里并不要求文件真是存在,只是得一个File实例
         */
        File file = new File("./hello.txt");
        System.out.println(file.exists());

File类中的常用方法

修饰符及返回值类型方法签名说明
StringgetParent()返回File对象的父目录文件路径
StringgetName()返回对象的纯文件名称
StringgetPath()返回File对象文件路径
StringgetAbsolutePath()返回File对象的绝对路径
StringgetCanonnicalPath()返回File对象修饰过的绝对路径
booleanexists()判断File对象描述的文件是否真是存在
booleanisDirectory()判断File描述的文件是否是一个目录
booleanisFile()判断File对象代表的文件是否是一个普通文件
booleancreateNewFile()根据FIle对象自动创建一个空文件。成功创建后返回true
booleandelete()根据FIle对象,删除该文件。成功删除后返回true
voiddeleteOnExit()根据FIle对象,标注文件将被删除,删除动作会到JVM运行结束使才会进行
String[]list()返回File对象代表的目录下的所有文件名
File[]listFIles()返回File对象代表的目录下的所有文件,以File对象表示
booleanmkdirs()创建File对象代表的目录,如果必要,会创建中间目录
booleanrenameTo(File dest)进行文件改名,也可以视为平时的剪切、粘贴操作
booleancanRead()判断用户是否对文件有可读权限
booleancanWrite()判断用户是否对文件有可写权限

代码示例

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

public class Test {
    public static void main(String[] args) throws IOException {
        /** File实例的创建
         * 这里并不要求文件真是存在,只是得一个File实例
         * 在当前作业下的上一级路景观获取文件描述
         */
        //文件并不存在
        File file = new File("../hello.txt");
        System.out.println(file.exists());
        System.out.println(file.getParent());
        /**
         * 返回绝对路径
         */
        System.out.println(file.getAbsoluteFile());
        /**
         * 返回File对象修饰过后的真实路径
         */
        System.out.println(file.getCanonicalFile());

    }
}

在这里插入图片描述

普通文件的创建及删除:

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

public class Test2 {
    public static void main(String[] args) throws IOException {
        /**
         * 要求文件不存在才能看到效果
         */
        File file = new File("./hello.txt");
        System.out.println("file.exists():" + file.exists());
        //创建一个普通文件
        System.out.println("file.isDirectory()" + file.isDirectory());
        System.out.println("file.isFile()" + file.isFile());
        System.out.println("file.createNewFile()" + file.createNewFile());
        System.out.println("file.exists()" + file.exists());
        System.out.println("file.isDirectory()" + file.isDirectory());
        System.out.println("file.isFile()" + file.isFile());
        //此时文件已经存在不能创建
        System.out.println("file.createNewFile()" + file.createNewFile());
    }
}

在这里插入图片描述

在这里插入图片描述

文件内容的读写——数据流

InputStream 概述

修饰符及返回值类型方法签名说明
intread()读取一个字节数据,返回-1代表全部读完
intread(byte[] b)最多读取b.length字节数据到b中,返回实际读到的数据量,-1代表读完
intread(byte[] b,int off,int len)off为b中的偏移,最多读取len - off字节数据到b中
voidclose()关闭字节流

强调:
InputStream是一个抽象类,要使用需要具体的是现实类。关于InputStream的实现类有很多,基本可以认为不同的输入设备都可以对应一个InputStream类,我们现只关心从文件中读取,使用FileInputStream即可。

FileInputStream概述

签名说明
FileInputStream(File file)利用FIle构造文件输入流
FileInputStream(String name)利用文件路径构造文件输入流

代码演示

首先在当前目录下准备hello.txt的文件,然后往里面输入数据,这里的输入流是从硬盘中的文件输入到内存中
在这里插入图片描述

import java.io.*;

public class Test3 {
    public static void main(String[] args) throws IOException {
        File file = new File("./hello.txt");
        System.out.println(file.exists());
        InputStream inputStream = new FileInputStream(file);
        while (true) {
            int ch = inputStream.read();
            if (ch == -1) {
                //代表已经读完了
                break;
            }
            System.out.print((char)ch);
        }
        /**
         * 注意:一定要记得关闭资源
         */
        inputStream.close();
    }
}

在这里插入图片描述

OutputStream概述

强调:
同样的OutputStream也是一个抽象类,需要具体的实现类,现在我们还是只需要关心FileOutputStream即可。

我们这里输出流指的是输出到硬盘上的文件中。

在这里插入图片描述

代码演示

import java.io.*;

public class Test4 {
    public static void main(String[] args) throws IOException {
        //获取文件描述符
        File file = new File("./hello.txt");
        OutputStream outputStream = new FileOutputStream(file);
        outputStream.write('h');
        outputStream.write('e');
        outputStream.write('l');
        outputStream.write('l');
        outputStream.write('o');
        /**
         * 重要:我们知道 I/O 的速度是很慢的,所以,大多的 OutputStream 为
         * 了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的
         * 一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写
         * 入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的
         * 数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,
         * 调用 flush(刷新)操作,将数据刷到设备中。
         */
        outputStream.flush();
        outputStream.close();
    }
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值