07 IO流(四)——文件字节流 FileInputStream/FileOutputStream与文件的拷贝
两个类的简述
专门用来对文件进行读写的类。
父类是InputStream、OutputStream
文件读入细节
FileOutputStream流的构造方法:new FileOutputStream(File f,boolean append),第二个参数默认值为false,表示数据不追加到文件,也就是直接覆盖文件,
缓冲池细节
- 将数据读入程序时,用byte数组存储,起到一个缓冲池的作用。
- byte数组(缓冲池)的初始长度写法应为:new byte[1024*n];使用1024乘n的方式更能直观的表现出缓冲池的大小。
- byte数组,一个长度代表一个字节(Byte)。
FileInputStream的read(byte[] b)方法细节
- int read(byte b)
- 返回值为int型,返回的是单次读入的数据长度,若无数据可读,则返回-1。
- 该方法将读到的数据存到b数组中。
文件写入细节
FileOutputStream的write方法
- void write(byte[] b)
- void write(byte[] b,int offset,int length) //从数组b中,从offset偏移量开始,写入lenght长度的数据到输出流指向的文件中去。
写完之后,使用flush方法手动刷新(流关闭时会自动刷新一次)。
写入的是byte[]数组,所以,也可以将字符串使用String.getBytes()方法得到数组写入文件。例如从网络爬到的字符串。
关闭流细节
先打开的后关闭
各个流分别关闭,分别写自己的try-catch
需要捕捉的异常
1.读入时
在流搭建的时候(InputStream fis = new FileInputStream(src)),可能存在读取的文件源src不存在的情况,就要报FileNotFoundException,捕获之。
2.写入时
写入时,有可能报IOException异常,捕获之。
3.关闭流时
关闭流时可能报IOException,捕获之。
案例1:从文件到文件的数据读写——文件拷贝
流程为
- 新建文件源,包括输入文件源,输出文件源
- 新建流,包括FileInputStream输入流与FileOutputStream输出流
- 新建缓冲区byte数组
- 将数据从输入文件源读入缓冲区
- 将数据写入输出文件源
- 关闭流
代import java.io.*;
public class IO_Test1
{
public static void main(String[] args){
//例子1:拷贝文件(将一个文件的数据读入并写入另一个文件中)
//1.创建文件源
//文件源
File src = new File("a1.txt");
//输出文件
File des = new File("a2.txt");
//2.选择流:先初始化流
//输入流
InputStream fis = null;
//输出流
OutputStream fos = null;
try{
fis = new FileInputStream(src);
fos = new FileOutputStream(des);//FileOutputStream(String/File s/f,bolean append)false表示不追加
//3.操作
//读取文件1的数据
//定义缓冲池
byte[] datas = new byte[1024*3];//单词读取3kB
//定义一个变量用以接收单次读入数据的长度
int length;
//开始读取
while((length = fis.read(datas))!=-1){ //int read(byte[] byteArray)方法:fis对象读取数据至数组中,返回值为读取的数据的长度。当为空时,返回-1 //写入文件2中
fos.write(datas,0,length);//boolean write(byte[] byteArray,int offset,int length,) 将数组中的数据通过输出流写入,从数组的offset位开始,长度为length
//刷新
fos.flush();
}
}catch(FileNotFoundException e1){
e1.printStackTrace();
System.err.println("找不到文件");
}catch(IOException e2){
e2.printStackTrace();
System.err.println("IO异常");
}finally{
//4.关闭流
try{
fos.close();
}catch(IOException e3){
e3.printStackTrace();
System.out.println("流关闭异常");
}
try{
fis.close();
}catch(IOException e4){
e4.printStackTrace();
}
}
}
}
案例2:从网络数据等到文件的写入
流程
- 新建输出文件源
- 新建FileOutputStream输出流
- 将字符串(如网络爬下来的)调用getBytes方法以获得存储着数据的byte数组
- 将数据写入输出文件源
- 关闭流
代码
import java.io.*;
public class IO_Test1
{
public static void main(String[] args){ //例子2:将一个字符串的内容写入文件2
//1.文件源
//String文件源
String str = "是个傻子";
//将字符串编码为byte数组
byte[] strByte = str.getBytes();
//输出文件源
File fw = new File("fw.txt");
//2.选择流:初始化一个输出流
FileOutputStream fos2 = null;
try{
//与输出文件源建立输出流
fos2 = new FileOutputStream(fw);
//3.操作
//通过输出流写入数组中的数据
fos2.write(strByte);
fos2.flush();//刷新
}catch(IOException e4){
e4.printStackTrace();
System.err.println("例子2失败");
}finally{
//4.关闭流
try{
if(null!=fos2){
fos2.close();
System.out.println("例子2成功!");
}
}catch(IOException e5){
e5.printStackTrace();
System.out.println("IO流关闭异常");
}
}
}
}
07 IO流(四)——文件字节流 FileInputStream/FileOutputStream与文件的拷贝的更多相关文章
- Java基础知识强化之IO流笔记22:FileInputStream / FileOutputStream 复制文本文件案例1
1. 使用字节流FileInputStream / FileOutputStream 复制文本文件案例: 分析: (1)数据源:从哪里来 a.txt -- 读取数据 -- FileInpu ...
- (16)IO流之输入字节流FileInputStream和输出字节流FielOutputStream
IO流技术解决的问题:设备与设备之间的传输问题,内存-->硬盘,硬盘-->内存,等等 IO流技术 如果按照数据的流向划分可以划分为:输入流和输出流 输入输出的标准是以程序为参考物的,如果流 ...
- Java基础知识强化之IO流笔记26:FileInputStream / FileOutputStream 复制mp4视频的案例
1. 需求:把D:\\English.mp4 复制到当前项目目录下copy.mp4 代码示例: package com.himi.filecopy; import java.io.FileInput ...
- Java基础知识强化之IO流笔记25:FileInputStream / FileOutputStream 复制图片案例
1. 需求:把D:\\美女.jpg 复制到当前项目目录下mn.jpg 代码示例: package com.himi.filecopy; import java.io.FileInputStream; ...
- Java基础知识强化之IO流笔记24:FileInputStream / FileOutputStream 复制文本文件案例2
1. 需求:把d盘下的a.txt的内容复制到f盘下的b.txt中: 代码示例: package com.himi.filecopy; import java.io.FileInputStream; i ...
- Java IO(五)字节流 FileInputStream 和 FileOutputStream
Java IO(五)字节流 FileInputStream 和 FileOutputStream 一.介绍 字节流 InputStream 和 OutputStream 是字节输入流和字节输出流的超类 ...
- Java基础-IO流对象之字节流(Stream)
Java基础-IO流对象之字节流(Stream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在前面我分享的笔记中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现 ...
- J03-Java IO流总结三 《 FileInputStream和FileOutputStream 》
1. FileInputStream FileInputStream是一个文件输入节点流,它是一个字节流,它的作用是将磁盘文件的内容读取到内存中. FileInputStream的父类是Inpu ...
- 黑马程序员_java基础笔记(07)...IO流
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— IO(InputStream,outputStream)字节流 (Reader,Wr ...
随机推荐
- C仿黑白棋版XO棋
两位玩家轮流在棋盘上放置不同颜色的棋子,一位玩家使用黑子,另一位使用白子,棋盘是一个偶数正方形. 只能将一个棋子放在对手的棋子旁边,使对手在水平.垂直.对角线方向上的棋子变成自己的棋子,游戏结束时,棋 ...
- html常用标签详解
html常用标签详解 一.总结 一句话总结: 这些资料没必要自己总结,可以直接网上找,简单方便,再根据需求改一下 二.HTML常用标签详解 转自或参考:HTML常用标签详解https://blog.c ...
- flask 设置访问地址 和 访问端口
app.run() 四个参数 host:主机,可设置为本地或其他IP port:端口,是run()启动服务的时候指定的运行端口, debug:调试,如果需要进入调试模式,可以将这个选项设置成True ...
- vuejs2从入门到精通视频教程
https://www.cnblogs.com/web-666/p/8648607.html 一.基础部分 0.课件 1.介绍 2.vue实例 3.模板语法 4.计算属性和观察者 5.Class与St ...
- 如何将eclipse项目导入到idea
intellij idea中文资料网上比较少,对于eclipse的项目如何导入intellij idea也没有完整的说明,本人在这里整理下,方便更多人加入到intellij idea的阵容里. 直接上 ...
- Type-C转接头 还是别用了,影响速率啊
今天用Type-C转接USB头传照片真慢! 在数码配件领域,越是不起眼的小外设,隐藏其背后的猫腻和水分也就越多.就拿常见的Micro USB转USB Type-C转接头和TF转SD卡套而言,你觉得 ...
- 【转】IDEA新建项目时,没有Spring Initializr选项(亲测有效)
最近开始使用IDEA作为开发工具,然后也是打算开始学习使用spring boot.看着博客来进行操作上手spring boot,很多都是说创建一个新项目(Create New Project) 选择 ...
- git如何查找某个包含指定字符串的commit hash值?
答: git shortlog --format='%H|%cn|%s' | grep '需要查找的字符串内容'
- 从0开始学爬虫9之requests库的学习之环境搭建
从0开始学爬虫9之requests库的学习之环境搭建 Requests库的环境搭建 环境:python2.7.9版本 参考文档:http://2.python-requests.org/zh_CN/l ...
- 读《中国人工智能与 IJCAI 的 40 周年,还有哪些未曾对外诉说的故事?》
原文地址: https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_10186783044528 ...