重点
1.File相关概述
1.1File是什么?
File 翻译过来指的是文件,表示一个文件类
File更应该叫做一个路径,包括文件路径和文件夹路径
File是指文件和目录路径名的抽象表示形式
1.2 路径的分类
路径分为绝对路径和相对路径
绝对路径是一个固定的路径,从盘符开始
C:\Users\10301\Desktop\eclipse\plugins
相对路径相对于某个位置开始
如:eclipse\plugins就是一个相对路径
2.File 类的使用
2.1 File的构造方法
File(String pathname):根据一个路径得到File对象
File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对
2.2 File类的创建功能
public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了
public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
*注意事项:*如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。
2.3File类的重命名功能
public boolean renameTo(File dest):把文件重命名为指定的文件路径
重命名注意事项:
如果路径名相同,就是改名。
如果路径名不同,就是改名并剪切。
2.4 File类的删除功能
public boolean delete():删除文件或者文件夹
删除注意事项:
Java中的删除不走回收站。
要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹
2.5File类的判断功能
public boolean isDirectory():判断是否是目录
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏
2.6File类的获取功能
public String getAbsolutePath():获取绝对路径
public String getPath():获取路径
public String getName():获取名称
public long length():获取长度。字节数
public long lastModified():获取最后一次的修改时间,毫秒值
public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200107210241757.png
2.7文件名称过滤器
File类提供了两个文件过滤器方法
public String[] list(FilenameFilter filter)
public File[] listFiles(FileFilter filter)
这两个方法在返回数组前就可以把符合条件的文件过滤出来
见练习2
3.IO流相关概念
3.1什么是IO流?
IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的类都在IO包中
3.2 IO流分类
- 按流向来分
输入流InpuStream(读取数据)
输出流OutStream(写数据)
- 按操作类型分
字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
字符流 : 字符流只能操作纯字符数据
3.3 Java中常用IO流的类
- 字节流的抽象父类:
InputStream 输入流
OutputStream 输出流
- 字符流的抽象父类:
Reader 字符读取流
Writer 字符写入流
4.InputStream
- InputStream是抽象类,表示字节输入流,用于读数据。
- 直接已知子类:
AudioInputStream
ByteArrayInputStream
FileInputStream(学习文件输入流)
FilterInputStream
ObjectInputStream
PipedInputStream
SequenceInputStream
StringBufferInputStream
5.FileInputStream
5.1概述:
FileInputStream 从文件系统中的某个文件中获得输入字节。FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader
5.2构造方法
FileInputStream(File file)
FileInputStream(String name)
5.3方法
Int read()方法,读取一个字节
6.OutputStream
6.1概述
outputStream译为输出流
OutputStream是一个抽象类,它用于往文件里写入内容
6.2子类
7.FileOutputStream
概述
表示文件输出流,用于往文件写内容
构造方法:
FileOutputStream(String name)
FileOutputStream(File file)
方法:
write(int b);//每次写一个字节
write(byte[] b) ;//一次写多个字节
练习题
1.输出指定目录下指定后缀的文件名
需求:判断指定目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
方式1
方式2
2.判断指定目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
3.读取txt文件内容
4.读取txt文件内容另外一种写法
//读到的数据是码表的对应值,读取a,就是97
3.往b.txt 写个内容
5.拷贝图片和音频
原理,使用输入流读取数据,使用输出流写数据
画图讲原理和性能
每次都读一次字节,太慢,效率太低
面试题
1.read()方法读取的是一个字节,为什么返回是int,而不是byte ?
public static void main(String[] args) {
//面试题:read()方法读取的是一个字节,为什么返回是int,而不是byte ?
//如果使用FileInputStream读取图片数据
/**
* 00010111 00010111 00010111 00010111
* 00010111 11111111 00010111 00010111
*
* byte:11111111 表示的-1
* int:00000000 00000000 00000000 11111111
*
* 为什么11111111是表示-1?
* 因为计算机是以补码的方式计算
* 补码: 11111111 (-1)
* 反码: 11111110
* 原码: 10000001
*
* 假如使用FileInputStream读取图片的时候,
* 图片中间有一段数据刚好是 11111111,这八个一表示的-1,用byte接收
* java程序如果读取的是-1,后面的数据就不读取
* 如果把8个1转成int,那就是00000000 00000000 00000000 11111111,这个表示255,就不是-1,归避后面数据没有读取问题
*
*/
}
总结
今天学了文件操作和IO流,文件其实也是一个对象,从它的构造方法,成员方法学习,掌握的文件/文件夹的创建、重命名、删除等方法,其中涉及到createNewFile() 、mkdir() 、mkdirs()创建多个文件,delect()方法。在获取指定.jpg时,用到了文件的过滤,涉及到接口FilenameFilter,一般通过匿名内部类直接用,很方便。后面学到了IO流,会使用InputStream和OutStream两个抽象类的实现类FileInputStream和FileOutStream的内部方法读取read()和写入write(),最后通过一个案例拷贝图片和音频,能很好的掌握IO流操作,不过在文件有4M的音频拷贝,用常规的一边读一遍写入很慢!