两个类的简述

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

父类是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. mui openWindow方法详细说明

    mui.openWindow({ url: 'xxx.html', //String类型,要打开的界面的地址 id: 'id', //String类型,要打开的界面的id styles: { //We ...

  2. Oracle语法 及 SQL题目(一)

    目录 课例复制 SQL题目一 SQL题目二 SQL题目三 笔记 课例复制 OCM 全称:Oracle Certified Master 认证大师 含义:Oracle 原厂推出的数据库方向最高级别认证 ...

  3. Visual Studio 2019 使用 Web Deploy 发布远程站点到IIS服务器

    Visual Studio 2019 使用 Web Deploy 发布远程站点到IIS服务器的方式 在开发完项目之后,我们需要把开发的项目发布到指定的服务器上,有两种方式,如下 1.把项目发布成文件系 ...

  4. python oracle 写文件 多个SQL变量问题

  5. getLocation 需要在 app.json 中声明 Permission 字段

    小程序开发中,清除授权状态后,重新编译,提示:getLocation 需要在 app.json 中声明 Permission 字段 需要在 app.json 里面增加 permission 属性配置( ...

  6. vim支持golang函数调整

    golang函数跳转需要借助godef实现 godef安装如下 go get -v github.com/rogpeppe/godef go install -v github.com/rogpepp ...

  7. StringBuffer & StringBuilder的区别

    StringBuffer是线程安全的,内部有锁.所以比StringBuilder慢一点. 在单线程生成字符串的情况下,优先使用StringBuilder. 这就是为啥有时候IntelliJ Idea会 ...

  8. vmware配置双网卡

    最近在学习使用iptables做网关服务器,即SNAT设置 我们的宿主机有两块网卡,地址分别是: 192.168.6.108/24 192.168.66.119/24 我们的目标是在虚拟机VMware ...

  9. flutter Dismissible 可以在拖动时隐藏的widget

    import 'package:flutter/material.dart'; class DismissedAppPage extends StatefulWidget { @override St ...

  10. vs Qt mysql 打包程序 Driver not loaded Driver not loaded

    vs下开发Qt连接mysql程序,开发过程中操作MySQL没有问题,但打包以后安装在别的电脑上发现竟然无法连接MySQL,打包的时候,所需的libmysql.dll等dll文件拷贝到exe同级目录了, ...