目录
文件字节输出流:写字节出去
构造器及常用方法
实例演示
案例:文件复制
过程分析
复制照片
复制文件
文件字节输出流:写字节出去
FileOutputStream(文件字节输出流)
- 作用:以内存为基准,把内存中的数据以字节的形式写出到文件中去。
构造器及常用方法
构造器 | 说明 |
---|---|
public FileOutputStream(File file) | 创建字节输出流管道与源文件对象接通 |
public FileOutputStream(String filepath) | 创建字节输出流管道与源文件路径接通 |
public FileOutputStream(File file, boolean append) | 创建字节输出流管道与源文件对象接通,可追加数据 |
public FileOutputStream(String filepath, boolean append) | 创建字节输出流管道与源文件路径接通,可追加数据 |
方法名称 | 说明 |
---|---|
public void write(int a) | 写一个字节出去 |
public void write{byte[] buffer) | 写一个字节数组出去 |
public void write(byte[] buffer ,int pos ,int len) | 写一个字节数组的一部分出去。 |
public void close()) throws IOException | 关闭流。 |
实例演示
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
public class FileOutputStreamTest1 {
public static void main(String[] args) throws Exception {
//1.创建一个字节输出流管道与目标文件接通
//覆盖管道:覆盖之前的数据
// OutputStream os = new FileOutputStream("HelloWorld\\src\\file.txt");
//追加数据的管道
OutputStream os = new FileOutputStream("HelloWorld\\src\\file.txt", true);
//2.开始写字节数据出去
os.write(97); //97就是一个字节,代表a
os.write('b'); //'b'一个字节
// os.write('森'); //汉字为三个字节,默认只能泄出去一个字节
byte[] bytes = "我爱你中国ABC".getBytes(StandardCharsets.UTF_8);
os.write(bytes);
os.write(bytes,0,15);
//换行符
os.write("\r\n".getBytes()); //多平台适用的换行符
os.close(); //关闭流
}
}
运行之后file文件的内容变为:
案例:文件复制
过程分析
例如现在我们要将D盘的文件复制一份到C盘中去。
要清楚通过文件字节输入输出流来实现的话,其中间层是内存;
- 首先创建字节输入流管道,让这条管道从D盘输入数据到内存中去,
- 字节输入流管道使用read方法,存入字节数组中;
- 然后创建字节输出流管道,从字节数组中输出到C盘;
重复进行,直到文件复制完毕。
复制照片
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class copyFile {
public static void main(String[] args) throws Exception{
//需求:复制照片
//1.创建一个字节输入流管道与源文件接通
InputStream is = new FileInputStream("C:\\Users\\Administrator\\Pictures\\flower.jpg");
//2.创建一个字节输出流管道与目标文件接通
OutputStream os = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\test.jpg");
//3.创建一个字节数组,负责转移字节数据
byte[] buffer = new byte[1024]; //1KB
//4.从字节输入流中读取字节数据,写出去到字节输出流中,读多少写出去多少
int len; //记住每次读取了多少个字节
while( (len = is.read(buffer)) != -1 ){
os.write(buffer,0,len);
}
os.close(); //从内到外关闭流
is.close();
System.out.println("复制完成!");
}
}
复制文件
也可以复制文本文件,即便中文编码被中间截断,也可以在后面的拷贝中接上,最终还是一个完整的文件。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class copyFile {
public static void main(String[] args) throws Exception{
//需求:复制文件
//1.创建一个字节输入流管道与源文件接通
InputStream is = new FileInputStream("HelloWorld\src\file.txt");
//2.创建一个字节输出流管道与目标文件接通
OutputStream os = new FileOutputStream("HelloWorld\src\filecopy.txt");
//3.创建一个字节数组,负责转移字节数据
byte[] buffer = new byte[1024]; //1KB
//4.从字节输入流中读取字节数据,写出去到字节输出流中,读多少写出去多少
int len; //记住每次读取了多少个字节
while( (len = is.read(buffer)) != -1 ){
os.write(buffer,0,len);
}
os.close(); //从内到外关闭流
is.close();
System.out.println("复制完成!");
}
}
字节流非常适合做一切文件的复制操作
任何文件的底层都是字节,字节流做复制,是一字不漏的转移完全部字节,只要复制后的文件格式一致就没问题!
END
学习自:黑马程序员——Java课程