文件操作- IO

    • File

构造方法

基本方法

修饰符及返回

值类型

方法签名

说明

String

getParent()

返回 File 对象的父目录文件路径

String

getName()

返回 FIle 对象的纯文件名称

String

getPath()

返回 File 对象的文件路径

String

getAbsolutePath()

返回 File 对象的绝对路径

String

getCanonicalPath()

返回 File 对象的修饰过的绝对路径

boolean

exists()

判断 File 对象描述的文件是否真实存在

boolean

isDirectory()

判断 File 对象代表的文件是否是一个目录

boolean

isFile()

判断 File 对象代表的文件是否是一个普通文件

boolean

createNewFile()

根据 File 对象,自动创建一个空文件。成功创建后返

回 true

boolean

delete()

根据 File 对象,删除该文件。成功删除后返回 true

void

deleteOnExit()

根据 File 对象,标注文件将被删除,删除动作会到

JVM 运行结束时才会进行

String[]

list()

返回 File 对象代表的目录下的所有文件名

File[]

listFiles()

返回 File 对象代表的目录下的所有文件,以 File 对象

表示

boolean

mkdir()

创建 File 对象代表的目录

boolean

mkdirs()

创建 File 对象代表的目录,如果必要,会创建中间目

boolean

renameTo(File

dest)

进行文件改名,也可以视为我们平时的剪切、粘贴操

boolean

canRead()

判断用户是否对文件有可读权限

boolean

canWrite()

判断用户是否对文件有可写权限

基本的file类内的一些方法等基本能够掌握,那我们如果改变文件里面的内容呢? 这里就要涉及一个全新的概念:流对象

2.流对象

可以将数据的读写操作想象成一大盆里面的水,水就是数据,当我们往里加水的时候,想加多少加多少,只要不超过盆的限度,这时候就叫写操作——输出流,反之把水(数据)放出的过程就是——读操作,输入流。

把读写文件的相关对象就叫流对象,而java中流对象主要分为俩大类:字节流,字符流。

我们要清楚的是,这俩大类有很多共同点的(在使用的时候):

1.打开文件 构造
2.读操作/写操作
3.关闭文件

3.字节流

字节流是操作二进制文件的,

InputStream

这是个抽象类不能直接实例化,当然还有OutputStream、Write、Reader。

其构造不再赘述,主要讲解其发方法:

修饰符及

返回值类

方法签名

说明

int

read()

读取一个字节的数据,返回 -1 代表已经完全读完了

int

read(byte[] b)

最多读取 b.length 字节的数据到 b 中,返回实际读到的数

量;-1 代表以及读完了

int

read(byte[] b,

int off, int len)

最多读取 len - off 字节的数据到 b 中,放在从 off 开始,返

回实际读到的数量;-1 代表以及读完了

void

close()

关闭字节流

read方法 记住返回值 是实际读取的个数

InputStream 只是一个抽象类,要使用还需要具体的实现类。关于 InputStream 的实现类有很多,基本

可以认为不同的输入设备都可以对应一个 InputStream 类,我们现在只关心从文件中读取,所以使用

FileInputStream

public static void main1(String[] args) throws IOException {
        //InputStream inputStream = new FileInputStream("D:/test.txt");
        try(InputStream inputStream = new FileInputStream("D:/test.txt");) {
            while(true){
                int b = inputStream.read();
                if(b == -1){
                    //文本读操作完成
                    break;
                }
                System.out.printf("%c",b);
            }
        }
    }

这是常见的字符流读操作的基本实现try可以实现close的用法,用b接受read的返回值,每次循环的时候都要判断是否为-1,为-1的话就要break

还有一种方法就是用数组的形式来接受读操作

public static void main(String[] args) throws IOException {
        try(InputStream inputStream = new FileInputStream("D:/test.txt")) {
            while(true){
                byte[] buffer = new byte[1024];
                int len = inputStream.read(buffer);
                if(len == -1){
                    break;
                }
                for(int i = 0;i < len;i++){
                    System.out.printf("%c",buffer[i]);
                }
            }
        }
    }

要注意这里的buffer是缓冲区的意思,这里read方法传进去的参数,是我们想要的结果,这就是典型的输出型参数。


要注意的是这里的read参数与行为

buffer的长度是1024,将buffer传进方法之后,read方法会想尽办法读取文本将1024个位置占满,但是并不是每一个文件都有这些数据的,如果不够的话,有多少填多少,返回值是当前填入了多少个数据,如果超过了就返回1024.

OutputStream

此类可以实现写操作,要知道的是,每次写操作就会把之前的数据先清空再进行操作。

并且input是读,output是写 这个是以cpu角度来看的。

字符流

而字符流语法和字节流差不多 就是write reader....

Scanner

public static void main(String[] args){
        try(InputStream inputStream = new FileInputStream("D:/test.txt")) {
            while(true){
                Scanner scanner = new Scanner(inputStream);
                System.out.println(scanner.next());
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值