流的概念
什么是流
概念:
内存与存储设备之间传输数据的通道。
上传文件和下载文件
Java对数据的操作是通过流的方式
Java用于操作流的对象都在IO包中
IO流常用的基类
字节流的抽象基类:
InputStream,OutputStream
字符流的抽象基类:
Reader,Writer
流的分类
按流向分
输入流:将<存储设备>中的内容读入到<内存>中。
输出流:将<内存>中的内容写入到<存储设备>中
按单位分
字节流:以字节为单位,可以读取所有数据。
- InputStream:字节输入流
- OutputStream:字节输出流
字符流:以字符为单位,只能读写文本数据。
- Reader:字符输入流
- Writer: 字符输出流
综上所述,字节流和字符流都可以读写文本数据。那么我们应该在什么情况下使用那种流呢?
如果数据所在的文件通过Windows自带的记事本打开并能读懂里面的内容,就是用字符流,其他情况下用字节流。如果你什么都不知道,就用字节流。
File类
概述
文件和目录路径的抽象表现形式。
构造方法
1 | public File (String pathname); //参数为当前文件夹/文件的路径(推荐方式) |
File类中的常用方法
创建方法
1 | //先创建一个文件对象 |
$\color{red}{如果描述文件或者文件夹没有指定盘符,相对路径:默认是在当前项目路径下。}$
删除方法和重命名功能
1 | //public boolean delete(): 删除目录/文件 |
判断功能
1 |
|
File类的获取功能
1 |
|
有一个小需求:
获取当前D盘下的所有以’.jpg’结尾的文件.首先,对当前需求进行分析:
描述D盘符
获取当前盘符下的所有文件/文件夹所表示字符串/目录下的文件的File数组
判断如果当前字符串数组或者File数组不为空,遍历获取到每一个文件目录
判断如果当前File是否是表示的文件 再次判断是否以”.jpg”结尾
输出即可!
这次我们使用public File[] listFiles()
功能,这个方法相对public String[] list()
来说比较麻烦,它提供了以下的方法:
1 |
|
在调用这个方法的是时候,列表已经获取到了FilenameFilter:文件名过滤器
抽象方法:
boolean accept(File dir , String name):是否将文件添加到文件列表中
返回值为true:表示添加到指定文件列表中
/*
方法业务:根据具体的情况判断
* "所有的以".jpg"结尾的文件!"
* dir表示是否文件
* name是否"已.jpg结尾"
*/
//描述一下D盘
File file = new File("D:\\") ;
//public File[] listFiles(FilenameFilter filter):高级功能:获取file表示的目录中文件的File数组//参数为:文件名称过滤器
File[] fileArray = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//return false;
//业务:
/**
* "所有的以".jpg"结尾的文件!"
* dir表示是否文件
* name是否"以.jpg结尾"
*/
/*
File file = new File(dir,name) ;
boolean flag1 = file.isFile() ; //true:是文件
boolean flag2 = name.endsWith(".jpg") ;//true:文件名称是以.jpg结尾
System.out.println(name);
return flag1 && flag2 ;
*/
//一步走:
return new File(dir,name).isFile() && name.endsWith(".jpg") ;
}
}) ;
//遍历File数组
if(fileArray!=null) {for(File f:fileArray) {
System.out.println(f.getName());
}
}