什么是字节流
像操作 图片 视频 mp4 文档(里面可能有图片) 等等
注意点
- 必须使用try catch finally 来包 不用throws(流是要关闭的 如果中途抛错 throws 无法将流关闭 浪费资源)
- UTF-8编码下 一个 中文占3个字节 GB2312编码下 一个中文占2个字节
示例
package day03;
import org.junit.Test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 对于文本文件(.txt .java .c .cpp) 使用字符流处理
* <p>
* 对于非文本文件(.jpg .mp3 .mp4 .doc .ppt) 使用字节流处理
*/
public class FileInputOutputStream {
/**
* 使用字节流 处理 文本文件 可能出现乱码
* 我� �吴� �� � �吴� �� � �宝� ��我 老� �
* UTF-8编码下 一个 中文占3个字节 GB2312编码下 一个中文占2个字节
*/
@Test
public void testFileInputStream() {
FileInputStream fileInputStream = null;
try {
File file = new File("08_IO\\hello1");
fileInputStream = new FileInputStream(file);
byte[] bytes = new byte[5];
int len;
while ((len = fileInputStream.read(bytes)) != -1) {
String s = new String(bytes, 0, len);
System.out.print(s + "\t");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭资源
try {
if (fileInputStream != null) {
fileInputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 使用FileInputStream 和 FileOutPutStream 复制文件的操作
*/
@Test
public void testFileInputOutputSream() {
// 定义 输入 输出 对象
FileInputStream fis = null;
FileOutputStream fos = null;
try {
// 定义File类对象
File srcFile = new File("08_IO\\16.jpg");
File destFile = new File("08_IO\\16_1.jpg");
// 定义 操作对象
fis = new FileInputStream(srcFile);
fos = new FileOutputStream(destFile);
byte[] bytes = new byte[5];
int len;
// 复制图片
while ((len = fis.read(bytes)) != -1) {
fos.write(bytes, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭流资源
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 指定路径下文件的复制
*/
public void copyFile(String srcPath, String destPath) {
// 定义 输入 输出 对象
FileInputStream fis = null;
FileOutputStream fos = null;
try {
// 定义File类对象
File srcFile = new File(srcPath);
File destFile = new File(destPath);
// 定义 操作对象
fis = new FileInputStream(srcFile);
fos = new FileOutputStream(destFile);
byte[] bytes = new byte[100];
int len;
// 复制图片
while ((len = fis.read(bytes)) != -1) {
fos.write(bytes, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭流资源
if (fis!=null){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Test
public void testCopyFile() {
long startTime = System.currentTimeMillis();
copyFile("C:\\Users\\yyll\\Desktop\\1.mp4","C:\\Users\\yyll\\Desktop\\1_1.mp4");
long endTime = System.currentTimeMillis();
System.out.println("复制花费时间==>" + (endTime - startTime)); // 4915
}
}
小结
字节流 总结起来第一步
创建File
对象
- new File(String path);
- new File(String parent,String child);
- new File(File parent,String child)
常用的三种创建方式
第二步
创建流
new FileInputSream(File)
new FileInputSream(String)
第三步
读取操作
read
方法 write
方法
第四步
关闭流
一定要放到finally中