两个类的简述

专门用来对文件进行读写的类。

父类是InputStream、OutputStream

文件读入细节

FileOutputStream流的构造方法:new FileOutputStream(File f,boolean append),第二个参数默认值为false,表示数据不追加到文件,也就是直接覆盖文件,

缓冲池细节

  1. 将数据读入程序时,用byte数组存储,起到一个缓冲池的作用。
  2. byte数组(缓冲池)的初始长度写法应为:new byte[1024*n];使用1024乘n的方式更能直观的表现出缓冲池的大小。
  3. byte数组,一个长度代表一个字节(Byte)。

FileInputStream的read(byte[] b)方法细节

  1. int read(byte b)
  2. 返回值为int型,返回的是单次读入的数据长度,若无数据可读,则返回-1。
  3. 该方法将读到的数据存到b数组中。

文件写入细节

FileOutputStream的write方法

  1. void write(byte[] b)
  2. 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:从文件到文件的数据读写——文件拷贝

流程为

  1. 新建文件源,包括输入文件源,输出文件源
  2. 新建流,包括FileInputStream输入流与FileOutputStream输出流
  3. 新建缓冲区byte数组
  4. 将数据从输入文件源读入缓冲区
  5. 将数据写入输出文件源
  6. 关闭流

代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:从网络数据等到文件的写入

流程

  1. 新建输出文件源
  2. 新建FileOutputStream输出流
  3. 将字符串(如网络爬下来的)调用getBytes方法以获得存储着数据的byte数组
  4. 将数据写入输出文件源
  5. 关闭流

代码

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与文件的拷贝的更多相关文章

  1. Java基础知识强化之IO流笔记22:FileInputStream / FileOutputStream 复制文本文件案例1

    1. 使用字节流FileInputStream / FileOutputStream 复制文本文件案例: 分析: (1)数据源:从哪里来 a.txt   --   读取数据  --  FileInpu ...

  2. (16)IO流之输入字节流FileInputStream和输出字节流FielOutputStream

    IO流技术解决的问题:设备与设备之间的传输问题,内存-->硬盘,硬盘-->内存,等等 IO流技术 如果按照数据的流向划分可以划分为:输入流和输出流 输入输出的标准是以程序为参考物的,如果流 ...

  3. Java基础知识强化之IO流笔记26:FileInputStream / FileOutputStream 复制mp4视频的案例

    1.  需求:把D:\\English.mp4 复制到当前项目目录下copy.mp4 代码示例: package com.himi.filecopy; import java.io.FileInput ...

  4. Java基础知识强化之IO流笔记25:FileInputStream / FileOutputStream 复制图片案例

    1.  需求:把D:\\美女.jpg 复制到当前项目目录下mn.jpg 代码示例: package com.himi.filecopy; import java.io.FileInputStream; ...

  5. Java基础知识强化之IO流笔记24:FileInputStream / FileOutputStream 复制文本文件案例2

    1. 需求:把d盘下的a.txt的内容复制到f盘下的b.txt中: 代码示例: package com.himi.filecopy; import java.io.FileInputStream; i ...

  6. Java IO(五)字节流 FileInputStream 和 FileOutputStream

    Java IO(五)字节流 FileInputStream 和 FileOutputStream 一.介绍 字节流 InputStream 和 OutputStream 是字节输入流和字节输出流的超类 ...

  7. Java基础-IO流对象之字节流(Stream)

    Java基础-IO流对象之字节流(Stream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在前面我分享的笔记中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现 ...

  8. J03-Java IO流总结三 《 FileInputStream和FileOutputStream 》

    1. FileInputStream    FileInputStream是一个文件输入节点流,它是一个字节流,它的作用是将磁盘文件的内容读取到内存中. FileInputStream的父类是Inpu ...

  9. 黑马程序员_java基础笔记(07)...IO流

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— IO(InputStream,outputStream)字节流 (Reader,Wr ...

随机推荐

  1. C格式字符串转为二叉树

    最近在LeetCode做题,二叉树出现错误时不好排查,于是自己写了一个函数,将前序遍历格式字串转换成二叉树. 形如 "AB#D##C##" 的字符串,"#"表示 ...

  2. WINDOWS远程控制LINUX终端XSHELL

    WINDOWS远程控制LINUX终端XSHELL 笔者购买的腾讯云CENTOS7,通过腾讯云的控制台登录,每次都要打开相关网页.输入密码,感觉操作非常不方便. 使用XSHELL远程控制LINUX终端, ...

  3. Cesium - Fabric 材质【转官网】

    https://github.com/AnalyticalGraphicsInc/cesium/wiki/Fabric Fabric Hannah edited this page on 24 Dec ...

  4. 使用TFA启动需要知道哪些概念?

    1. Boot stage BL1,BL2,BL31,BL32,BL33 2. Exception level EL3, EL1S, EL2 3. 那么放在表格里比较一下咯 Boot stage Ex ...

  5. 代替ESXI的虚拟机解决方案proxmox

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/matengbing/article/de ...

  6. 蒙特卡洛树搜索算法 —— github上的implement的原代码

    首先在网上看到了关于蒙特卡洛搜索算法的介绍,如下: https://www.cnblogs.com/steven-yang/p/5993205.html 并从中发现了一个在GitHub上impleme ...

  7. ISO/IEC 9899:2011 条款6.8.2——标签语句

    6.8.2 复合语句 语法 1.compound-statement: {    block-item-listopt    } block-item-list: block-item block-i ...

  8. Spring mvc4 + ActiveMQ 整合【什么框架与什么框架的整合搜索】

    一.配置部分 二.代码部分 三.页面部分 四.Controller控制器 五.效果展示 六.加入监听器 七.最最重要的,别忘了打赏 一.配置部分 ActiveMQ的安装这就不说了,很简单, 这个例子采 ...

  9. ES6深入浅出-11 ES6新增的API(上)-2.Array新增API

    Array.form 把不是数组的东西变成数组.最常见的就是把伪数组变成数组 那么什么是伪数组 这就是伪数组,因为它不是继承自Array的原型的对象.它只是一个看起来很像数组的数组 只看下面的代码.a ...

  10. Qt编写气体安全管理系统11-数据打印

    一.前言 在各种软件系统中,数据打印也是常用的功能之一,一般来说会对查询的数据结果导出到excel,还会对查询的数据结果直接打印,在Qt中提供了打印机类QPrinter,在printsupport组件 ...