IO流(3)—字节流
- IO体系:
- 抽象基类————节点流(文件流)
- InputStream——FileInputStream(字节流)
- OutputStream——FileOutputSteam(字节流)
- Reader ————FileReader(字符流)
- Writer————FileWriter(字符流)
- 分类:
- 按操作数据单位不同:字节流(8bit)主要处理除了文本文件以外的问文件、字符流(16bit)主要处理文本文件
- 按数据流的流向不同:输入流、输出流
- 按流的角色不同:节点流(直接作用于文件的:FileInputStream、FileOutputSteam、FileReader、FileWriter)、
- 处理流(除了以上四个之外都是)
字节流:
这里介绍FileInputStream和FileOutputStream,用于处理视频文件、音频文件、图片、.doc。
示例代码:
public class FileInputOutputStreamTest {
//使用FileInputStream硬盘读取一个文件,控制台打印
@Test
public void testFileInputStream(){
//方法:read()
//1.创建一个File类对象
File file = new File("E:/workspace/hello.txt");
//2.创建一个FileInputStream类对象
try {
FileInputStream fis = new FileInputStream(file);
try {
//3.调用FileInputStream类的方法读取数据
int i = fis.read();//read()会报异常,需要try catch
while(i != -1){
System.out.print((char)i);
i = fis.read();
}
} catch (IOException e) {
e.printStackTrace();
}finally{//无论前面出不出异常,这个是一定要执行的
try {//因为执行该语句本身会报异常,所以try-catch
//4.关闭流
fis.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
} catch (FileNotFoundException e) {
System.out.println("指定文件不存在!");
}
}
//方法read(byte[] b)从 硬盘读取字符,控制台打印
@Test
public void testFileInputStream1(){
//1.创建一个File类对象
//2.创建一个FileInputStream类对象
FileInputStream fis = null;
try {
File file = new File("E:/workspace/hello.txt");
fis = new FileInputStream(file);
//3.调用FileInputStream类的方法读取数据
byte[] bytes = new byte[5];
int len;//每次都入到数组中的长度
while((len = fis.read(bytes)) != -1){
for(int i = 0; i < len; i++){
System.out.print((char)bytes[i]);
}
//或者这样写
//String str = new String(bytes,0,len);
//System.out.println(str);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(fis != null){
try {//因为执行该语句本身会报异常,所以try-catch
//4.关闭流
fis.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
//使用FileOutputStream写出数据到硬盘一个文件
@Test
public void testFileOutputStream(){
//1.创建一个file对象
File file = new File("file/hello.txt");//当这个文件不存在时,就创建
//2.创建一个输出流(FileOutputStream)对象,将file对象作为形参传递进给输出流(FileOutputStream)构造器中去
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
//3.写入操作
fos.write(new String("I LOVE MY FIMARY 我爱我家!").getBytes());
} catch (Exception e) {
e.printStackTrace();
}finally{
if(fos != null){
try {
//4.关闭操作
fos.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
//一边读取一边写入,把1.jpg文件中的内容复制到2.jpg文件中
@Test
public void testFileInputOutputStream(){
//1.两个file对象
File file1 = new File("file/1.jpg");
File file2 = new File("file/2.jpg");
//2.输入输出流
FileInputStream fis = null;
FileOutputStream fos = null;
byte[] b = new byte[20];
int len;
try {
fis = new FileInputStream(file1);
fos = new FileOutputStream(file2);
//3.开始循环读取1.jpg文件中的数据
while((len = fis.read(b)) != -1){
//4.读取之后就写入到2.jpg文件中
fos.write(b,0,len);//错误的写法:fos.write(b)和fos.write(b,0,b.length)
}
} catch (Exception 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();
}
}
}
}
//使用FIleInputStream和FileOutputStream方法复制文件
public void copyFile(String src,String dest){
//1.两个file对象
File file1 = new File(src);
File file2 = new File(dest);
//2.输入输出流
FileInputStream fis = null;
FileOutputStream fos = null;
byte[] b = new byte[1024];
int len;
try {
fis = new FileInputStream(file1);
fos = new FileOutputStream(file2);
//3.开始循环读取文件中的数据
while((len = fis.read(b)) != -1){
//4.读取之后就写入到另一个文件中
fos.write(b,0,len);//错误的写法:fos.write(b)和fos.write(b,0,b.length)
}
} catch (Exception 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();
}
}
}
}
//执行以上方法,计算使用FIleInputStream和FileOutputStream传输文件使用的时间
@Test
public void testCopyFile(){
long start = System.currentTimeMillis();
String src = "file/1.mp4";
String dest = "file/3.mp4";
copyFile(src,dest);
long end = System.currentTimeMillis();
System.out.println("花费时间:"+(end - start));//花费时间为1085毫秒
}
}
IO流(3)—字节流的更多相关文章
- java io流(字节流)复制文件
java io流(字节流) 复制文件 //复制文件 //使用字节流 //复制文本文件用字符流,复制其它格式文件用字节流 import java.io.*; public class Index{ pu ...
- IO流(字节流复制)01
package ioDemo; import java.io.*; /** * IO流(字节流复制) * Created by lcj on 2017/11/2. */ public class bu ...
- JavaSE学习笔记(14)---File类和IO流(字节流和字符流)
JavaSE学习笔记(14)---File类和IO流(字节流和字符流) File类 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 构造方 ...
- 【JAVA IO流之字节流】
字节流部分和字符流部分的体系架构很相似,有四个基本流:InputStream.OutputStream.BufferedInputStream.BufferedOutputStream,其中,Inpu ...
- Java笔记(二十六)……IO流上 字节流与字符流
概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...
- 【Java IO流】字节流和字符流详解
字节流和字符流 对于文件必然有读和写的操作,读和写就对应了输入和输出流,流又分成字节和字符流. 1.从对文件的操作来讲,有读和写的操作——也就是输入和输出. 2.从流的流向来讲,有输入和输出之分. 3 ...
- JavaSE(十二)之IO流的字节流(一)
前面我们学习的了多线程,今天开始要学习IO流了,java中IO流的知识非常重要.但是其实并不难,因为他们都有固定的套路. 一.流的概念 流是个抽象的概念,是对输入输出设备的抽象,Java程序中 ...
- IO流之字节流知识总结
IO流分为字符流和字节流. 字节流;可以读取任何文件,电脑以字节的方式储存 字符流:用来读取字符. 下面是我总结的思维导图. 相关练习代码 public class Demo { @Test publ ...
- Java基础:IO流之字节流和字符流
1. 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端 ...
- java的IO流,字节流和字符流
java操作文件都是通过流来处理的,(其实其他很多语言也是这样) 第一:java的IO流,分为:输入流 和 输出流(这真是废话,这是从流向的角度来说的) 第二:java的所有IO流,只分为:字节流 和 ...
随机推荐
- 优化 Markdown 在 Notepad++ 中的使用体验
选择一个强大而好用的文本编辑器,是进行 Web 开发和编程必不可少的一部分,甚至对于通常的写作,一个舒服的文本编辑器也会让你写起文字来觉得优雅而潇洒.Sublime Text 是一款不错的编辑器,简洁 ...
- 【bzoj1264】[AHOI2006]基因匹配Match 树状数组
题解: 一道比较简单的题目 容易发现状态数只有5*n个 而转移需要满足i1<i2;j1<j2 那么很明显是二维平面数点 暴力一点就是二维树状数组+map 5nlog^3 比较卡常 但是注意 ...
- net core体系-web应用程序-4net core2.0大白话带你入门-10asp.net core session的使用
asp.net core session的使用 Session介绍 本文假设读者已经了解Session的概念和作用,并且在传统的.net framework平台上使用过. Asp.net core ...
- netty04(重点来了、指定某个客户端发信息或者群发)小声嘀咕~~我也是从零开始学得、、、想学习netty的又不知道怎么下手的童鞋们~~
还是和上几篇一样,先给出前面笔记的连接,有没看的可以去看看再来! netty01 . netty02 .netty03 看到这里.你基本上可以使用netty接受信息和根据对应的信息返回信息了 接 ...
- Eclipse的properties文件中文乱码解决方法
转自:http://jingyan.baidu.com/article/ed2a5d1f3381d709f6be17f8.html 打开Myeclipse,找到window这一栏,点击Preferen ...
- day16 函数的用法:内置函数,匿名函数
思维导图需要补全 : 一共有68个内置函数: #内置:python自带 # def func(): # a = 1 # b = 2 # print(locals()) # print(globals( ...
- Linux学习之查看系统资源命令总结(二十二)
Linux系统之查看系统资源总结 . 转载:http://lxbins.blog.51cto.com/1089997/283663 top命令:监控系统 top 主要参数 d:指定更新的间隔,以秒计算 ...
- 流网络分析系统-SNAS
流网络分析系统-SNAS SNAS,Streaming Network Analytics System (project SNAS) ,是一个收集.跟踪.存取 千万条实时路由对象的系统. 官网:ht ...
- Unity容器的简单AOP与DI的应用Demo(基于asp.net mvc框架)
转发请注明出处:https://home.cnblogs.com/u/zhiyong-ITNote/ 整个Demo是基于Controller-Service-Repository架构设计的,每一层之间 ...
- 表单提交和ajax提交数据的请求区别
在http请求中,我们通常会看到请求字段以query string parameters,或form data,或request payload形式发送到服务器,究竟他们有什么区别呢?下面为您揭晓答案 ...