作用:传输数据
分类:
按流向分类
输入流:给程序中传入数据
输出流:将程序中的数据输出
按输出的内容分类
字节流:传输的最小单位为字节(byte), 可以传输任何类型的数据
字符流:传输的最小单位为字符(char),只能传输文本
按功能分类
包装流:包装节点流,提供特有功能
节点流:从数据源到程序,不加工
字节流
顶级父类
InputStream:所有的字节输入流的父接口
提供的方法:
int read():一次读取一个字节,返回值为读取到的字节
int read(byte b[]):一次读一组字节,将读取到的数据存储到b数组中,返回值为读取到的字节长度,当返回值为-1表示结束
int read(byte b[], int off, int len):一次读一组字节,从off位置开始存储,存储len个,返回值为读取到的字节长度,当返回值为-1表示结束
void close():关流
OutputStream:所有的字节输出流的父接口
提供的方法
void write(int b):一次写出一个字节
void write(byte b[]):一次写入一组字节的内容
void write(byte b[], int off, int len):一次写入一组字节的内容,从off位置开始输出,输出len个
void flush():冲刷
void close():关流
文件流
文件输入流FileInputStream
文件输出流FileOutputStream
构造函数:
FileOutputStream(String path);
参数:
path:写入的文件地址
FileOutputStream(String path,boolean append);
参数:
path:写入的文件地址
append:是否为追加模式
注意:
不是追加模式:
当文件不存在时,创建文件,只能创建一级文件
当文件存在时,删除原有文件,重新创建
是追加模式
当文件不存在时,创建文件,只能创建一级文件
当文件存在时,在原有基础上进行添加
内存流
作用:从内存中读取数据或向内存中写入数据
内存输入流:ByteArrayInputStream
内存输出流:ByteArrayOutputStream
默认大小:32字节
特有方法:
toByteArray():获取内存输出流中的数据
缓冲流
作用:提高数据的读写效率,属于包装流
注意:默认缓冲区大小8kb
缓冲输入流:BufferedInputStream
缓冲输出流:BufferedOutputStream
注意:包装流在关闭时会关闭其包装的节点流
对象流
作用:将对象写入到指定位置或从指定位置读取对象
要求:对象所属的类必须实现序列化接口,包含类中的属性都要实现序列化接口(Serializable接口)
对象输入流:ObjectInputStream
特有方法:
Object readObject();
对象输出流:ObjectOutputStream
特有方法:
void writeObject(Object obj);
注意
存储的对象所在的类要实现序列化接口
static,transient不参与序列化
所有参与序列化的属性所属的类也要实现序列化接口
一次只能写入或读取一个对象
字符流
概念:传输的最小单位为字符的流
注意:只能用于传输文本
Reader
作用:所有字符输入流的父类
提供的方法:
int read()
int read(char cbuf[])
int read(char cbuf[], int off, int len)
void close()Writer
作用:所有字符输出流的父类
提供的方法:
void write(int c)
void write(char cbuf[])
void write(char cbuf[], int off, int len)
void write(String str):一次写入一个字符串
void write(String str, int off, int len) 一次写入一个字符串的一部分,从off位置开始,写入len个
void flush()
void close()
分类
文件流
FileReader:文件字符输入流
FileWriter:文件字符输出流
缓冲流
作用:提高代码读写效率
BufferedReader
特有方法:
String readLine():一次读取一行,当返回值为null表示读取结束,返回值为读取到的字符串
BufferedWriter
特点方法:
newLine():写入一个换行
默认缓冲区大小:8192个字符
转换流
作用:将字节输入流转换为字符输入流,将字符输出流转换为字节输出流
InputStreamReader:将字节输入流转换为字符输入流
构造函数:
InputStreamReader(InputStream in, String charsetName)
参数1:转换的字节流
参数2:编码格式,与读取的数据编码格式一致
OutputStreamWriter:将字符输出流转换为字节输出流
构造函数:
OutputStreamWriter(OutputStream out, String charsetName)
参数1:转换的字节流
参数2:编码格式,与写入的数据编码格式一致
标准输出流
PrintStream,字节流
于将数据输出到标准输出流(通常是控制台)。它是 OutputStream
的子类
File
构造函数
File(String pathname)
参数:
pathname:文件或文件夹地址
如:
new File("D:\新建文件夹\test_1.txt");D盘下新建文件夹下test_1.txt文件
File(String parent, String child)
参数:
parent:父级文件夹地址
child:文件或文件夹名称
new File("D:\新建文件夹","test_1.txt");
File(File parent, String child)
参数:
parent:父级文件夹
child:文件或文件夹名称
File f1 = new File("D:\新建文件夹");
new File(f1,"test_1.txt");
File(URI uri)
参数:
uri:文件地址对应的url对象
URI uri = URI.create(文件地址);
常用方法
String getName()
: 返回文件或目录的名称。String getPath()
: 返回文件或目录的路径。boolean exists()
: 判断文件或目录是否存在。boolean isDirectory()
: 判断当前File
对象是否表示一个目录。boolean isFile()
: 判断当前File
对象是否表示一个文件。long length()
: 返回文件的大小(字节数)。boolean canRead()
: 判断文件或目录是否可读。boolean canWrite()
: 判断文件或目录是否可写。boolean createNewFile()
: 创建一个新文件。boolean mkdir()
: 创建一个新目录。boolean delete()
: 删除文件或目录。boolean renameTo(File dest)
: 重命名文件或目录。
// 创建File对象
File file = new File("path/to/file.txt");
// 获取文件或目录的名称和路径
String name = file.getName();
String path = file.getPath();
// 判断文件或目录是否存在
boolean exists = file.exists();
// 判断当前File对象表示的是否是目录
boolean isDirectory = file.isDirectory();
// 判断当前File对象表示的是否是文件
boolean isFile = file.isFile();
// 获取文件的大小
long fileSize = file.length();
// 判断文件是否可读或可写
boolean canRead = file.canRead();
boolean canWrite = file.canWrite();
// 创建一个新文件
boolean newFileCreated = file.createNewFile();
// 创建一个新目录
boolean newDirCreated = file.mkdir();
// 删除文件或目录
boolean deleted = file.delete();
// 重命名文件或目录
File newFile = new File("path/to/newfile.txt");
boolean renamed = file.renameTo(newFile);
//获取系统路径分割符public static final String separator
String separator = File.separator;
System.out.println("路径分隔符: " + separator);
注意:
文件地址可以填写相对路径,也可以填写绝对路径
绝对路径:从盘符开始书写的文件路径
相对路径:相对于当前项目的位置(JavaSE项目中)
\:windows的路径分隔符
..:上一级文件夹
.:当前路径