字节输入流
所谓字节流,就是在内存中以字节的形式储存数据,写入数据,所以在流的分类中分为输出流和输入流
字节输入流:FileInputStream
FileInputStream从某个文件中获得输入字节,使用方面仅限于字节,比如说拷贝图片
父类:——-InputStream
子类:——-FileInputStream
要实现一个文件的读取,就是读取到内存中,就要实现流的几个必须步骤:
1.找到目标文件
2.创建数据传输通道
3.把读取到的文件进行储存
4.关闭资源
下面举一个例子来说明这几个步骤
package 博客代码;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class Demo1 {
/**
*
* @param args
* 用字节输入流实现文件内容的读取
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//1.找到目标文件名字
File file = new File("E:\\Java\\IO测试文件夹\\user.txt");
//2.创建数据传输通道
FileInputStream fileInputStream = new FileInputStream(file);
//3.读取数据
//一个字节字节的读取
byte[] b= new byte[1024];
int length;
while ((length = fileInputStream.read()) != -1) {
//因为循环后输出的是字节,需要把字节转为字符串
String string = new String(b,0,length);
System.out.print((char)length);
}
//关闭资源
fileInputStream.close();
}
}
输出结果: 123—321
创建byte[] b= byte[1024];的原因是为了提高储存效率,在读取的时候,先把读取的数据存到byte数组中,再进行输出,但是对于byte字节数组的输出也是有条件的:
byte[] b= new byte[1024];
1.当数组存满时
2.利用flush方法进行即时存储
3.关闭资源
字节输出流
既然是对文件的读写,那么有输入流(把文件从硬盘中读取到内存中),也就有输出流(把文件从内存中写到硬盘中)
字节输出流:
父类——OutputStream
子类——–FileOutputStream
对流的输出也和输入流一样,只是一个是写入方法,一个是写出方法:
1.找到目标文件
2.创建数据传输通道
3.把读取到的文件从内存从写出到硬盘
4.关闭资源
下面举一个例子来说明这几个步骤
package 博客代码;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo1 {
/**
*
* @param args
* 用字节输入流实现文件内容的读取
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//1.找到目标文件名字
File file = new File("E:\\Java\\IO测试文件夹\\user.txt");
//2.创建数据传输通道
FileOutputStream fileOutputStream = new FileOutputStream(file);
//3.读取数据
//一个字节字节的读取
String string = "Hello World!";
//把字符串转换为字节
byte[] b = string.getBytes();
//输出
fileOutputStream.write(b);
//4.关闭资源
fileOutputStream.close();
}
}
写入文件中的结果:Hello World!
当我们这样运行一次后,再写入其他得内容是,之前运行写入到硬盘中的内容就会被覆盖,这个时候API文档中为我们提供了一个追加功能,在创建数据的时候接着后面末尾的内容进行追加
FileOutputStream(File file, boolean append)
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
应用到代码中就是在创建通道的时候,在构造一个Ture
//2.创建数据传输通道
FileOutputStream fileOutputStream = new FileOutputStream(file,ture);
比如说我追加一个"123";
String string = "123";
文件输出结果:写入文件中的结果:Hello World!123
缓冲字节输出流
所谓缓冲字节输出流就是在字节输入流的基础之上加入了一个缓冲数组。其名字为:
BufferedInputStream
他的底部维护了一个1024字节的数组,用来储存写入的数据,原理就是在内存和硬盘之间建立了数组,可以理解为中介,当中介信息量够大 的时候,才会出去找人并且给一个人工作,其步骤和字节输入流时一样的
package 博客代码;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo1 {
/**
*
* @param args
* 用字节输入流实现文件内容的读取
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//1.找到目标文件名字
File file = new File("E:\\Java\\IO测试文件夹\\user.txt");
//2.创建数据传输通道
FileInputStream fileOutputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileOutputStream);
//3.读取数据
//一个字节字节的读取
int len;
while ((len=bufferedInputStream.read()) != -1) {
System.out.print((char)len);
}
}
}
输出结果:Hello World!123
这就是缓冲字节输入流的使用方法,就是在通道里面加入了一个缓冲数组,用来进行存储提高效率
缓冲字节输出流
使用方法和缓冲字节输入流,这里就不再写例子了,
总结:字节的输出流和输入流掌握的还行,能够运用,只是熟悉度要差那么一点