IO之字节流
什么是字节流
像操作 图片 视频 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中
IO之字节流的更多相关文章
- Java IO: 其他字节流(上)
作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackInputStream,SequenceInputS ...
- [Java IO]02_字节流
概要 字节流有两个核心抽象类:InputStream 和 OutputStream.所有的字节流类都继承自这两个抽象类. InputStream 负责输入,OutputStream 负责输出. 字节流 ...
- Java IO之字节流
Java中的输入是指从数据源等读到Java程序中,这里的数据源可以是文件,内存或网络连接,输出则是指从Java程序中写到目的地. 输入输出流可以分为以下几种类型(暂时不考虑File类) 类名 中文名 ...
- JAVA之IO流(字节流)
输入和输出 JAVA的流分为输入流和输出流两部分, 输入流:InputStream或者Reader:从文件中读到程序中: 输出流:OutputStream或者Writer:从程序中输出到文件中: Re ...
- java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝
接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...
- [Day23]IO(字节流、字符流)
1.字节流 1.1 字节输出流OutputStream-抽象类,表示输出字节流的所有类的超类 (1)void close() 关闭此输出流并释放与此流相关的所有系统资源 (2)void flush() ...
- IO流(字节流,字符流,缓冲流)
一:IO流的分类(组织架构) 根据处理数据类型的不同分为:字节流和字符流 根据数据流向不同分为:输入流和输出流 这么庞大的体系里面,常用的就那么几个,我们把它们抽取出来,如下图: 二:字符字节 ...
- IO 复习字节流字符流拷贝文件
/* 本地文件 URL 文件拷贝 *//*文本文件拷贝 可以通过 字符流,也可以通过字节流*/ /*二进制文件拷贝 只可以通过字节流*//* 希望这个例子能帮助搞懂 字符流与字节流的区别 */ imp ...
- Java——IO类 字节流概述
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- Java之IO流(字节流,字符流)
IO流和Properties IO流 IO流是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口.它对于任何计算机系统都非常关键, 因而所有 I/O 的主体实际上是内置在操作系统中的.单独的 ...
随机推荐
- Android中TextView和EditView常用属性设置
Android中TextView和EditView常用属性设置 点击跳转
- 微信小游戏 Three.js UI 2D text 简单方案
在微信小游戏中使用 THREE.js 引擎,没有合适的 UI 库可用,只能自己动手.图片啥的都还好,text 不好弄.text 要计算 width 和 height,不然事件响应范围不对. funct ...
- Redis-技术专区-让你彻底会使用“Redis中最陌生且最强大的集合”(ZSET)【前篇】
前言介绍 很多小伙伴都跟我说,redis中,ZSet(有序集合)是他们最陌生的集合,同时也是觉得特别复杂的集合之一,在开发过程中经常会用到它,而且也是大家最不太有把握使用的集合,所以笔者就从ZSet集 ...
- shell循环语句for
1.方式1 for i in {list[0]} {list[1]} .. do 执行命令 done 2.方式2(三要素循环) for (( 初始值; 判断值; 步长; )) do 执行命令 done
- openswan协商流程之(七):main_inR3
主模式第六包(收包):main_inR3 1. 序言 main_inR3()函数是ISAKMP协商过程中第一阶段的最后一个报文的接收处理函数,它的作用同main_inI3_outR3()部分功能相同: ...
- JAVA反序列化的简单探究
JAVA反序列化的简单探究 本文主要是探究,在反序列化过程中是怎么调用到readObject.readResolve.readExternal方法的问题 新建一个需要被序列化的类ObjectA,写入r ...
- Windows下安装程序时提示未安装Microsoft Net FrameWork 2.0
问题描述 安装程序时碰到如下: 现在基本都是用win7.win10系统,缺少环境大多数都是因为系统没有启用. 解决方法 控制面板 - 程序 - 启用或关闭Windows功能 - 把第一项'NET Fr ...
- go实现堆排序、快速排序、桶排序算法
一. 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法.以大堆为例利用堆顶记录的是最大关键字这一特性,每一轮取堆顶元素放入有序区,就类似选择排序每一轮选择一个最大值放入有序区,可以把堆排序看成是 ...
- Devexpress 饼状图
<dxc:ChartControl Name="chart" BorderThickness="0&q ...
- SpringMVC执行流程总结
SpringMVC 执行流程: 用户发送请求至前端控制器 DispatcherServlet DispatcherServlet 收到请求调用处理映射器 HandlerMapping 处理映射器根据请 ...