声明:本笔记大部分来自观看该文章的心得:
原文链接
博主:宜春
本人文章仅用于查阅和本人记录知识点,如有侵权本人会自行删除。
IO文件流
IO流的含义:
Java的IO流是实现输入和输出的基础,可以方便的实现数据的输入和输出操作。在java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为“流”(stream)。
流的分类
- 按照 流的文件类型:字节流(InputStream、OutputStream)和字符流(Reader,Writer)
- 按照 流的流向:输入流和输出流
- 按照 功能 :节点流 和 过滤流
所有文件数据(文本、图片、视频等)在存储时,都是二进制数字的形式,也就是一个一个的字节,传输时一样如此。所以,字节流可以传输任意文件数据。
绝对路径:一个完整的路径,以盘符开头,例如F://123.txt
相对路径:一个简化的路径,不以盘符开头,例如//123.txt//b.txt。
常用API
字符流
输入流创建
// 使用File对象创建流对象
File file = new File("xxx.txt");
FileReader reader= new FileReader(file);
// 使用文件名称创建流对象
FileReader reader = new FileReader("a.txt");
读取字符数据
// 使用文件名称创建流对象
FileReader reader = new FileReader("xxx.txt");
// 定义变量,保存数据
int len = -1;
// 循环读取
while ((len = reader .read())!=-1) {
System.out.println((char)len);
}
// 记得关闭资源
reader .close();
输出流类比一下
获取功能
getAbsolutePath() :返回此File的绝对路径名字符串。
getPath() :将此File转换为路径名字符串。
getName() :返回由此File表示的文件或目录的名称。
length() :返回由此File表示的文件的长度(字节)
如果File是目录,则返回值未指定。
判断功能
exists() :此File表示的文件或目录是否存在。
isDirectory() :此File表示的是否为 目录。
isFile() :此File表示的是否为 文件。
创建、删除功能
createNewFile() :文件不存在,创建一个新的空文件并返回true,文件存在,不创建文件并返回false。
delete() :删除由此File表示的文件或目录。
mkdir() :创建由此File表示的目录。如果父类不存在,则创建失败
mkdirs():创建由此File表示的目录,同时创建不存在的父级目录。
所以一般选用 mkdirs()
遍历目录
public static List<File> searchFiles(File directory, Predicate<File> predicate) {
//返回存储文件的容器
List<File> files = searchFiles(directory);
File dir = new File("G:\光标");
//造存放file的容器
File[] files = dir.listFiles();
//获取当前目录下的文件以及文件夹对象
for (File file : files) {
System.out.println(file);
}
}
listFiles指定目录必须存在,且必须指定目录,指定文件会发生空指针异常
File file=new File("D:\\XXX");
List<File> list = Arrays.asList(file.listFiles());
//判空
if (file != null) {
//遍历list
for (File f : list) {
if (f.isDirectory()) searchFiles(f);
else list.add(f);
}
}
那么什么时候用字节流什么时用字符流呢
在遍历文件时候,一般选择字符流
而对文件的内容进行读写操作时一般用字节流
无论使用什么样的流对象,底层传输的始终为二进制数据。但在用字符流读写文件内容时,规定的字符容器可能会大于需要读写的的内容(字节)
字节流
字节输、出流(OutputStream)
构造方法
public FileOutputStream(File file):以File对象为参数创建对象。
public FileOutputStream(String name): 以名称字符串为参数创建对象。
开发常用第二种,指定路径字符串