文章目录 一、分类 二、字节流 2.1 字节输出流(OutputStream) 2.1.1 输出流的方法 2.1.2 输出流的使用 2.2 字节输入流(InputStream) 2.2
文章目录
- 一、分类
- 二、字节流
- 2.1 字节输出流(OutputStream)
- 2.1.1 输出流的方法
- 2.1.2 输出流的使用
- 2.2 字节输入流(InputStream)
- 2.2.1 输入流的方法
- 2.2.2 输入流的使用
- 三、字节流实例练习
- 四、补充说明
一、分类
Java IO流分为字节流与字符流:
输入流
输入流
字节流
InputStream
OutputStream
字符流
Reader
Writer
二、字节流
- 文件数据在存储时,都是以二进制数字的形式保存的,即文件就是一个个字节,传输时同样如此。所以,字节流可以传输任意文件。
2.1 字节输出流(OutputStream)
以(FileOutputStream extends OutputStream):将内存中的字节写入到文件中
2.1.1 输出流的方法
- 构造方法:
– public FileOutputStream(String name):创建一个向指定文件中写入数据的输出文件流。
–public FileOutputStream(String name, boolean append):创建一个向指定文件中追加数据的输出文件流。 - close(): 关闭此输出流并释放与此流相关联的任何系统资源(完成流操作时,必须调用此方法)。
- flush() : 刷新此输出流并强制任何缓冲的输出字节被写入。
- wrtie(byte[] b):将整个字节数组写入此输出流。
- write(byte[] b,int off,int len): 从字节数组的偏移量off开始,将len长度的字节写入到此输出流。
2.1.2 输出流的使用
- 创建一个FileOutputStream对象,构造方法中传递写入数据的文件路径;
- 调用FileOutputStream对象的方法write,把数据写入到文件中;
- 调用close释放资源。
* 深入分析IO字节流--FileOutputStream
*
* @author zhuhuix
* @date 2020-06-14
*/
public class OutputStreamDemo {
public static void main(String[] args) throws IOException {
// 单字节写入
OutputStream stream = new FileOutputStream("c:\\a.txt");
// 写数据的时候,会把10进制数转换成2进制数:即99->1100001
stream.write(97);
stream.close();
// 多字节写入
byte[] bytes = {97,98,99};
stream = new FileOutputStream("c:\\abc.txt");
stream.write(bytes);
stream.close();
// 数组偏移量写入
stream = new FileOutputStream("c:\\ab.txt");
stream.write(bytes,0,2);
stream.close();
// 写入中文
stream = new FileOutputStream("c:\\aaa.txt");
stream.write("中文".getBytes());
stream.close();
}
}/**
* 深入分析IO字节流--FileOutputStream追加数据
*
* @author zhuhuix
* @date 2020-06-14
*/
public class OutputSrteamAppendDemo {
public static void main(String[] args) throws IOException {
// 单字节写入
OutputStream stream = new FileOutputStream("c:\\a.txt");
// 写数据的时候,会把10进制数转换成2进制数:即99->1100001
stream.write(97);
stream.close();
// 追加数据写入
stream = new FileOutputStream("c:\\a.txt",true);
// 循环追加10次
for (int i=0;i<10;i++) {
stream.write("\r\n".getBytes());
stream.write(97);
}
stream.close();
}
}
2.2 字节输入流(InputStream)
以(FileInputStream extends InputStream):将文件中的字节数据读取到内存中
2.2.1 输入流的方法
- 构造方法:
– public FileInputStream(String name):创建一个向指定文件读取数据的输入文件流。 - close(): 关闭此输入流并释放与此流相关联的任何系统资源(完成流操作时,必须调用此方法)。
- int read() : 从输入流中读取数据的下一个字节。
- int read(byte[] b):从输入流中读取一定数量的字节,存储在缓冲区数组中。
- int read(byte[] b,int off,int len): 将输入流中偏移量off开始,长度为len的字节读入到缓冲区数组中。
2.2.2 输入流的使用
- 创建一个FileInputStream对象,构造方法中传递读取数据的文件路径;
- 调用FileInputStream对象的方法read,把文件中的字节数据读取到内存中;
- 调用close释放资源。
* 深入分析IO字节流--FileInputStream
*
* @author zhuhuix
* @date 2020-06-14
*/
public class InputStreamDemo {
public static void main(String[] args) throws IOException {
InputStream stream = new FileInputStream("c:\\a.txt");
// 读取一个字节,文件末尾返回-1
System.out.println(stream.read());
// 循环读取单个字节
int b;
while ((b = stream.read()) != -1) {
System.out.print((char)(b));
}
stream.close();
// 读取多个字节
stream = new FileInputStream("c:\\abc.txt");
byte[] bytes = new byte[1024];
int len;
while ((len = stream.read(bytes)) != -1) {
System.out.println(new String(bytes,0,len));
}
stream.close();
}
}
三、字节流实例练习
- 文件复制:将C盘根目录下的logo.png复制到D盘根目录下。
* 深入分析IO字节流--通过字节流进行复制
*
* @author zhuhuix
* @date 2020-06-14
*/
public class FileCopyByStream {
public static void main(String[] args) throws IOException {
// 创建一个字节输入流绑定C盘根目录下的logo文件
FileInputStream fileInputStream = new FileInputStream("c:\\logo.png");
// 创建一个字节输出流绑定将要复制到D盘根目录下的同名文件
FileOutputStream fileOutputStream = new FileOutputStream("d:\\logo.png");
// 定义一个字节数组,放置输入流读出的字节流
byte[] bytes = new byte[1024];
// 循环读取字节流并写入输出流中
int len;
while ((len=fileInputStream.read(bytes)) != -1) {
fileOutputStream.write(bytes,0,len);
}
// 先关闭输出流,后关闭输入流
fileOutputStream.close();
fileInputStream.close();
}
}
四、补充说明
使用字节流类读取中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储,所以Java提供了字符流类,以字符为单位进行读写,专门用于处理文本文件的输入输出。