【074】Java IO 流
字节流的抽象基类:(可以操作各种数据,文本图片都可以)
- InputStream:对于计算机来说, 输入流即为读取流. 此抽象类是表示字节输入流的所有类的超类。
- OutputStream:输出流即为写入流. 此抽象类是表示输出字节流的所有类的超类。
- FileInputStream ----------- 便捷类
- FileOutputStream ----------- 便捷类
- BufferInputStream ----------- 高效类(需要先创建 FileInputStream)
- BufferOutputStream ----------- 高效类(需要先创建 FileOutputStream)
字符流的抽象基类:(用来操作文本)
- Reader:用于读取字符流的抽象类。
- Writer:写入字符流的抽象类。
- File
- Environment
- FileWriter ----------- 便捷类
- FileReader ----------- 便捷类
- BufferWriter ----------- 高效类(需要先创建 FileWriter)
- BufferReader ----------- 高效类(需要先创建 FileReader)
注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀,前缀名为类的功能.
中文参考:http://www.chinait8.net/api_html/j2se6/api/index.html
如:InputStream的子类FileInputStream
如:Reader的子类FileReader
< 文件 >
▼△▼ → File:
1. 文件和目录路径名的抽象表示形式。
java.lang.Object
↳ java.io.File
2. 构造函数:
构造方法摘要 | |
---|---|
File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 |
|
File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 |
|
File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 |
|
File(URI uri) 通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。 |
2. 方法:
方法摘要 | |
---|---|
boolean |
canExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。 |
boolean |
canRead() 测试应用程序是否可以读取此抽象路径名表示的文件。 |
boolean |
canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。 |
int |
compareTo(File pathname) 按字母顺序比较两个抽象路径名。 |
boolean |
createNewFile() 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。 |
static File |
createTempFile(String prefix, String suffix) 在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。 |
static File |
createTempFile(String prefix, String suffix, File directory) 在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。 |
boolean |
delete() 删除此抽象路径名表示的文件或目录。 |
void |
deleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。 |
boolean |
equals(Object obj) 测试此抽象路径名与给定对象是否相等。 |
boolean |
exists() 测试此抽象路径名表示的文件或目录是否存在。 |
File |
getAbsoluteFile() 返回此抽象路径名的绝对路径名形式。 |
String |
getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。 |
File |
getCanonicalFile() 返回此抽象路径名的规范形式。 |
String |
getCanonicalPath() 返回此抽象路径名的规范路径名字符串。 |
long |
getFreeSpace() 返回此抽象路径名指定的分区中未分配的字节数。 |
String |
getName() 返回由此抽象路径名表示的文件或目录的名称。 |
String |
getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null 。 |
File |
getParentFile() 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null 。 |
String |
getPath() 将此抽象路径名转换为一个路径名字符串。 |
long |
getTotalSpace() 返回此抽象路径名指定的分区大小。 |
long |
getUsableSpace() 返回此抽象路径名指定的分区上可用于此虚拟机的字节数。 |
int |
hashCode() 计算此抽象路径名的哈希码。 |
boolean |
isAbsolute() 测试此抽象路径名是否为绝对路径名。 |
boolean |
isDirectory() 测试此抽象路径名表示的文件是否是一个目录。 |
boolean |
isFile() 测试此抽象路径名表示的文件是否是一个标准文件。 |
boolean |
isHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件。 |
long |
lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。 |
long |
length() 返回由此抽象路径名表示的文件的长度。 |
String[] |
list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 |
String[] |
list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。 |
File[] |
listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 |
File[] |
listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。 |
File[] |
listFiles(FilenameFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。 |
static File[] |
listRoots() 列出可用的文件系统根。 |
boolean |
mkdir() 创建此抽象路径名指定的目录。创建成功返回 true, 否则 false. |
boolean |
mkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。 |
boolean |
renameTo(File dest) 重新命名此抽象路径名表示的文件。 |
boolean |
setExecutable(boolean executable) 设置此抽象路径名所有者执行权限的一个便捷方法。 |
boolean |
setExecutable(boolean executable, boolean ownerOnly) 设置此抽象路径名的所有者或所有用户的执行权限。 |
boolean |
setLastModified(long time) 设置此抽象路径名指定的文件或目录的最后一次修改时间。 |
boolean |
setReadable(boolean readable) 设置此抽象路径名所有者读权限的一个便捷方法。 |
boolean |
setReadable(boolean readable, boolean ownerOnly) 设置此抽象路径名的所有者或所有用户的读权限。 |
boolean |
setReadOnly() 标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。 |
boolean |
setWritable(boolean writable) 设置此抽象路径名所有者写权限的一个便捷方法。 |
boolean |
setWritable(boolean writable, boolean ownerOnly) 设置此抽象路径名的所有者或所有用户的写权限。 |
String |
toString() 返回此抽象路径名的路径名字符串。 |
URI |
toURI() 构造一个表示此抽象路径名的 file: URI。 |
URL |
toURL() 已过时。 此方法不会自动转义 URL 中的非法字符。建议新的代码使用以下方式将抽象路径名转换为 URL:首先通过 toURI 方法将其转换为 URI,然后通过 URI.toURL 方法将 URI 装换为 URL。 |
▼△▼ → Environment:
1. Provides access to environment variables.
java.lang.Object
↳ android.os.Environment
2. Fields:
- DIRECTORY_ALARMS:返回值:static String.
- DIRECTORY_DCIM:digital camera in memory.
- DIRECTORY_DOWNLOADS
- DIRECTORY_MOVIES
- DIRECTORY_MUSIC
- DIRECTORY_NOTIFICATIONS
- DIRECTORY_PICTURES
- DIRECTORY_PODCASTS
- DIRECTORY_RINGTONES
3. Methods:
- getDataDirectory():返回值:static File. 以下都是.
- getDownloadCacheDirectory()
- getExternalStorageDirectory():获取外存储设备(SD卡)的路径.
- getRootDirectory():Android 的根目录.
< 字符流 >
▼△▼ → FileWriter:
1. 用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter。
java.lang.Object
↳ java.io.Writer
↳ java.io.OutputStreamWriter
↳ java.io.FileWriter
2. 构造函数:
构造方法摘要 | |
---|---|
FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象。 |
|
FileWriter(File file, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。 |
|
FileWriter(FileDescriptor fd) 构造与某个文件描述符相关联的 FileWriter 对象。 |
|
FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象。 |
|
FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。 |
3. 方法:
方法摘要 | |
---|---|
Writer |
append(char c) 将指定字符添加到此 writer。 |
Writer |
append(CharSequence csq) 将指定字符序列添加到此 writer。 |
Writer |
append(CharSequence csq, int start, int end) 将指定字符序列的子序列添加到此 writer.Appendable。 |
abstract void |
close() 关闭此流,但要先刷新它。 |
abstract void |
flush() 刷新该流的缓冲。 |
void |
write(char[] cbuf) 写入字符数组。 |
abstract void |
write(char[] cbuf, int off, int len) 写入字符数组的某一部分。 |
void |
write(int c) 写入单个字符。 |
void |
write(String str) 写入字符串。 |
void |
write(String str, int off, int len) 写入字符串的某一部分。 |
FileWriter fw = new FileWriter("demo.txt"); //创建一个文件写入流对象,并与文件关联,不存在文件,就创建. //存在同名文件则会覆盖. fw.write("abcde"); //写入到流当中了,写入内存中了. fw.flush(); //刷新该流的缓冲,临时存放清空放入到目的地文件中. 可以用来释放内存. fw.close(); //关闭此流,但是要先刷新(相当于先执行flush()方法). FileWriter fw = new FileWriter("demo.txt", true); //追加文件.
▼△▼ → FileReader:
1. 用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。
java.lang.Object
↳ java.io.Reader
↳ java.io.InputStreamReader
↳ java.io.FileReader
2. 构造函数:
构造方法摘要 | |
---|---|
FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader。 |
|
FileReader(FileDescriptor fd) 在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。 |
|
FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。 |
3. 方法:
方法摘要 | |
---|---|
abstract void |
close() 关闭该流并释放与之关联的所有资源。 |
void |
mark(int readAheadLimit) 标记流中的当前位置。 |
boolean |
markSupported() 判断此流是否支持 mark() 操作。 |
int |
read() 读取单个字符。 |
int |
read(char[] cbuf) 将字符读入数组。 |
abstract int |
read(char[] cbuf, int off, int len) 将字符读入数组的某一部分。 |
int |
read(CharBuffer target) 试图将字符读入指定的字符缓冲区。 |
boolean |
ready() 判断是否准备读取此流。 |
void |
reset() 重置该流。 |
long |
skip(long n) 跳过字符。 |
read():一次读取一个字符.返回 read(char[]):读取字符数组.返回读到的字符个数.若是结尾返回-1. close():关闭流. FileReader fr = new FileReader("demo.txt"); //创建一个文件读取流对象,并与文件关联,保证该文件已经存在. int ch = 0; while((ch = fr.read()) != -1) //读到最后返回-1. { System.out.print((char)ch); } char[] buf = new char[1024]; //2k int num = 0; while((num=fr.read(buf))! = -1) { System.out.print(new String(buf,0,num)); }
< 字符流的缓冲区 >
▼△▼ → BufferWriter:
1. 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。使用的前提就一定要有流对象.
java.lang.Object
↳ java.io.Writer
↳ java.io.BufferedWriter
2. 构造函数:
构造方法摘要 | |
---|---|
BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流。 |
|
BufferedWriter(Writer out, int sz) 创建一个使用给定大小输出缓冲区的新缓冲字符输出流。 |
3. 方法:
方法摘要 | |
---|---|
void |
close() 关闭此流,但要先刷新它。 |
void |
flush() 刷新该流的缓冲。 |
void |
newLine() 写入一个行分隔符。 |
void |
write(char[] cbuf, int off, int len) 写入字符数组的某一部分。 |
void |
write(int c) 写入单个字符。 |
void |
write(String s, int off, int len) 写入字符串的某一部分。 |
FileWriter fw = new FileWriter("buf.txt"); //创建流. 用于后面创建 BufferedWriter. BufferedWriter bufw = new BufferedWriter(fw); //创建写入流缓冲区. bufw.write("abcde"); bufw.newLine(); //新行, 主要用来区别不同的系统. bufw.flush(); //刷新. bufw.close(); //同时也会关闭流, 并会刷新.
▼△▼ → BufferReader:
1. 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。使用的前提就一定要有流对象.
java.lang.Object
↳ java.io.Reader
↳ java.io.BufferedReader
2. 构造函数:
构造方法摘要 | |
---|---|
BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。 |
|
BufferedReader(Reader in, int sz) 创建一个使用指定大小输入缓冲区的缓冲字符输入流。 |
3. 方法:
方法摘要 | |
---|---|
void |
close() 关闭该流并释放与之关联的所有资源。 |
void |
mark(int readAheadLimit) 标记流中的当前位置。 |
boolean |
markSupported() 判断此流是否支持 mark() 操作(它一定支持)。 |
int |
read() 读取单个字符。 |
int |
read(char[] cbuf, int off, int len) 将字符读入数组的某一部分。 |
String |
readLine() 读取一个文本行。 |
boolean |
ready() 判断此流是否已准备好被读取。 |
void |
reset() 将流重置到最新的标记。 |
long |
skip(long n) 跳过字符。 |
FileReader fr = new FileReader("buf.txt"); BufferedReader bufr = new BufferedReader(fr); String strLine = null; while((strLine = bufr.readLine()) != null) { System.out.println(strLine); } bufr.close();
File sdCard = Environment.getExternalStorageDirectory(); //外存储器目录 File directory = new File (sdCard.getAbsolutePath() + "/MyFiles"); //进一步的文件夹目录 File file = new File(directory, "textfile.txt"); //文件夹内部的文件 FileReader fileReader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(fileReader); char[] inputBuffer = new char[100]; String strSum = ""; int charRead; while ((charRead = bufferedReader.read(inputBuffer)) > 0) { //每次读取100个字符, 没读完就继续. strSum += new String(inputBuffer); //就是读取的全部文本. } bufferedReader.close();
< 字节流 >
▼△▼ → FileInputStream:
1. FileInputStream 从文件系统中的某个文件中获得输入字节。
2. 构造函数:
构造方法摘要 | |
---|---|
FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个 FileInputStream ,该文件通过文件系统中的 File 对象 file 指定。 |
|
FileInputStream(FileDescriptor fdObj) 通过使用文件描述符 fdObj 创建一个 FileInputStream ,该文件描述符表示到文件系统中某个实际文件的现有连接。 |
|
FileInputStream(String name) 通过打开一个到实际文件的连接来创建一个 FileInputStream ,该文件通过文件系统中的路径名 name 指定。 |
3. 方法:
方法摘要 | |
---|---|
int |
available() 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。 |
void |
close() 关闭此文件输入流并释放与此流有关的所有系统资源。 |
protected void |
finalize() 确保在不再引用文件输入流时调用其 close 方法。 |
FileChannel |
getChannel() 返回与此文件输入流有关的唯一 FileChannel 对象。 |
FileDescriptor |
getFD() 返回表示到文件系统中实际文件的连接的 FileDescriptor 对象,该文件系统正被此 FileInputStream 使用。 |
int |
read() 从此输入流中读取一个数据字节。 |
int |
read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 |
int |
read(byte[] b, int off, int len) 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。 |
long |
skip(long n) 从输入流中跳过并丢弃 n 个字节的数据。 |
▼△▼ → FileOutputStream:
1. 文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。
2. 构造函数:
构造方法摘要 | |
---|---|
FileOutputStream(File file) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。 |
|
FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。 |
|
FileOutputStream(FileDescriptor fdObj) 创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。 |
|
FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流。 |
|
FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流。 |
3. 方法:
方法摘要 | |
---|---|
void |
close() 关闭此文件输出流并释放与此流有关的所有系统资源。 |
protected void |
finalize() 清理到文件的连接,并确保在不再引用此文件输出流时调用此流的 close 方法。 |
FileChannel |
getChannel() 返回与此文件输出流有关的唯一 FileChannel 对象。 |
FileDescriptor |
getFD() 返回与此流有关的文件描述符。 |
void |
write(byte[] b) 将 b.length 个字节从指定 byte 数组写入此文件输出流中。 |
void |
write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。 |
void |
write(int b) 将指定字节写入此文件输出流。 |
< 字节流的缓冲区 >
▼△▼ → BufferedInputStream:
1. BufferedInputStream 为另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。
2. 构造函数:
字段摘要 | |
---|---|
protected byte[] |
buf 存储数据的内部缓冲区数组。 |
protected int |
count 比缓冲区中最后一个有效字节的索引大 1 的索引。 |
protected int |
marklimit 调用 mark 方法后,在后续调用 reset 方法失败之前所允许的最大提前读取量。 |
protected int |
markpos 最后一次调用 mark 方法时 pos 字段的值。 |
protected int |
pos 缓冲区中的当前位置。 |
3. 方法:
构造方法摘要 | |
---|---|
BufferedInputStream(InputStream in) 创建一个 BufferedInputStream 并保存其参数,即输入流 in ,以便将来使用。 |
|
BufferedInputStream(InputStream in, int size) 创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流in ,以便将来使用。 |
方法摘要 | |
---|---|
int |
available() 返回可以从此输入流读取(或跳过)、且不受此输入流接下来的方法调用阻塞的估计字节数。 |
void |
close() 关闭此输入流并释放与该流关联的所有系统资源。 |
void |
mark(int readlimit) 参见 InputStream 的 mark 方法的常规协定。 |
boolean |
markSupported() 测试此输入流是否支持 mark 和 reset 方法。 |
int |
read() 参见 InputStream 的 read 方法的常规协定。 |
int |
read(byte[] b, int off, int len) 从此字节输入流中给定偏移量处开始将各字节读取到指定的 byte 数组中。 |
void |
reset() 参见 InputStream 的 reset 方法的常规协定。 |
long |
skip(long n) 参见 InputStream 的 skip 方法的常规协定。 |
▼△▼ → BufferedOutputStream:
1. 该类实现缓冲的输出流。
2. 构造函数:
构造方法摘要 | |
---|---|
BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。 |
|
BufferedOutputStream(OutputStream out, int size) 创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。 |
3. 方法:
方法摘要 | |
---|---|
void |
flush() 刷新此缓冲的输出流。 |
void |
write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。 |
void |
write(int b) 将指定的字节写入此缓冲的输出流。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)