【每日java】IO流知识重点:File文件字节输入输出流的读和写及应用:文件拷贝的实现

本文介绍了Java中File类的使用,重点关注File文件字节输入流的读取,包括存在的判断、字节数组的使用、长度参数的意义,并展示了文件拷贝的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

关于File类

File类是用来表示本地文件的,所以创建对象时需要指定本地文件的位置(通过File对象的有参构造传递参数来设置对象的位置属性)。但File类只是说明一个文件的概念,其对象是一个基于逻辑的文件,真实的文件可以不存在,也可以通过成员方法将逻辑文件创建成物理文件。exist()方法用来判断是否有真实的物理文件。File类可以创建的对象可以为文件也可以为目录(文件夹)。

重点:

File文件字节输入流的读(相对于写来说,读取数据有更多的注意事项)

指定文件:a.txt

输入流读取文件的实现:

运行结果:

重点①:

为什么要用if(file.exists()&&file.isFile())来判断?

答:因为不知道文件对象是逻辑上的还是真正存在在物理现实的,要用exists()方法来判断。而isFile()来判断其是文件还是文件夹,我们要的是对文件的操作。

重点②:

为什么要创建一个字节数组?

答:我们也可以用字节来接收,每次打印一个字节。但是用字节数组效率更高,每次可以读取和打印更多的内容。

重点③:

为什么要设置长度参数length?

答:在while语句判断时,就获得read()方法中返回的读取的字节长度。

重点④:

String str = new String(bytes,0,length);创建字符串时为什么要截取字节数组的一部分而不是全部内容呢?

答:首先我们从文件中读取的内容的长度是不可知的,我们的数组容器可能长度超过文件内容,也可能比文件内容长度短。所以我们使用循环读取。第一种情况:当数组容器超过文件内容时,循环执行一次就能把文件内的所有内容读取到字节数组中,但是数组中其他未填充的元素都是0,;如果我们之间将字节数组当做参数来构造字符串并打印,会打印出多余的0;所以我们设置截取字节数组的长度就是read()方法读取的字节长度来构造字符串,这样输出的字符串都是我们从文件中读取的内容。第二种情况:当数组容器小于文件内容,这样会多次循环读取,每次读取的长度为字节数组的长度。在读取数据前,read()方法会先判断当前指针是否有内容,如果没有会返回-1,跳出循环;若有内容则读取完字节数组的长度的内容,然后read指针指向文件中未读取的数据内容。经过多次循环,可能最后文件中剩余的内容小于或等于数组长度,如果等于数组长度则刚好将数组填满,此时构造字符串时无需截取数组。但是更多的情况是文件中剩余的内容小于数组长度。此时数组中的元素仍然有上一次循环所赋予的值,此时将文件中的内容读取到数组,会不完全的覆盖旧数组的内容,此时如果直接将字节数组用于构造字符串打印,会多打印上一次循环超过此次循环读入数据长度的部分。所以我们一般都要用length参数进行限制,打印的内容必须是我们读的内容,否则可能存储和打印错误。

应用:

1、文件的拷贝(复制)

现在桌面上有一个文件,我们如何实现将此文件拷贝到一个新文件呢?

现有文件:naruto.jpg

文件路径:C:\\Users\\lc\\Desktop\\naruto.jpg

源码与注释:

拷贝方法:

main方法:

运行结果:

文件拷贝成功实现!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值