Java中文件数据流操作有2个大类:OutputStream/InputStream接口 和 FileWriter/FileReader类

1. OutputStream接口:所有字节输出流的超类

包:java.io.OutputStream

作用:从java程序,写字节到文件,不能写入目录

字节:数据流以字节的形式进行操作

方法:因为是从程序存文件,因此方法都是write写方法

1.1. OutputStream所有方法

void write(int b) 将指定字节写入输出流

void write(byte[] b) 将字节数组写入输出流

void write(byte[] b, int off, int len) 将字节数组从off开始写入len个字节

void close() 关闭输出流

1.2. FileOutputStream类: OutputStream接口的一个实现类

1.2.1. 写字节到文件

构造方法:

作用:绑定输出的输出目的地

参数: FileOutputStream (File file)

FileOutputStream (String name)

流对象使用步骤:

1. 创建流子类的对象,丙丁数据目的

2. 调用流对象的方法write

3. close输出流

如果文件不存在,创建文件;如果文件已经存在,则不保留原来内容,即重写文件内容

public static void demo() throws IOException{

*    FileOutputStream f = new FileOutputStream("/kluter/temp/fileOutS");*

*    f.write(1);*

*    f.write(2);*

*    f.write(48); //“0”*

*    f.write(49); //“1”*

*    f.write(11); //0x0b*

*    f.write(15); //0x0f*

***    f.close();***

}

1.2.2 写字节数组到文件

写一个完整的字节数组:

public static void demo() throws IOException{

*    FileOutputStream f = new FileOutputStream("/kluter/temp/fileOutS");*

*    byte[] barr = {10, 11, 12, 13, 14, 15};*

*    f.write(barr);*

*    f.close();*

}

写部分字节数组:

public static void demo() throws IOException{

*    FileOutputStream f = new FileOutputStream("/kluter/temp/fileOutS");*

*    byte[] barr = {10, 11, 12, 13, 14, 15};*

*    f.write(barr, 2, 3);*

*    f.close();*

}

由于字节数组输入单个字节很麻烦,提供用String转换写字节数组的简便方式:

public static void demo() throws IOException{

*    FileOutputStream f = new FileOutputStream("/kluter/temp/fileOutS");*

***    String s = “abcdef”;***

***    f.write(s.getBytes());***

*    f.close();*

}

1.2.3. 追加数据到文件

使用带boolean append参数的双参构造器

FileOutputStream (File file, boolean append)

FileOutputStream (String name, boolean append)

public static void demo() throws IOException{

FileOutputStream f = new FileOutputStream("/kluter/temp/fileOutS", true);

*    String s = “abcdef”;*

*    f.write(s.getBytes());*

*    f.close();*

}

1.2.4. 换行符

加\n

public static void demo() throws IOException{

*    FileOutputStream f = new FileOutputStream("/kluter/temp/fileOutS", true);*

*    String s = “abcdef\n”;*

*    f.write(s.getBytes());*

*    f.close();*

}

1.3 I/O中的异常处理

说明:

1. 保证流对象变量,作用域正确

2. catch里面,怎么处理异常

输出异常,目的看到底哪里出了问题

因为可能是硬件问题,只能听下程序,从新尝试

3. 如果流对象创建失败了,需要关闭资源吗?

new对象的时候,失败了,没有占用系统资源

释放资源的时候,对流对象判断null,如果是null,不需要close资源

2. InputStream接口:所有字节输入流的超类

包:java.io.InputStream

作用:读取任意文件,每次读取一个字节

2.1. InputStream所有方法

abstract int read() 读取输入流的下1个字节

int read(byte[] b) 从输入流读取一些字节存储到缓冲区

int read(byte[] b, int off, int len) 从输入流偏移量off位置开始读取len个字节

void close() 关闭输入流

2.2. FileInputStream类: InputStream接口的一个实现类

构造方法:

FileInputSteam (File file)

FileInputSteam (String name)

2.2.1. 从文件读字节

read()方法的特点,读取一个字节,文件指针移到下一个字节

public int read()返回值:

读取到的字节:成功

-1:到文件末尾了

public static void input() throws IOException{

*    FileInputStream fin = new FileInputStream("/kluter/temp/fileOutS");*

*    int ret = 0;*

*    while(ret != -1){*

*        ret = fin.read();*

*        out.println(ret);*

*    }*

*    fin.close();*

}

2.2.2. 从文件读到字节数组

public int read(byte[] b)

返回值:

返回读取到的字节数:成功

-1:已经到达文件末尾

根据read返回读取的字节数来决定循环遍历:

public static void input() throws IOException{

*    FileInputStream fin = new FileInputStream("/kluter/temp/fileOutS");*

*    int ret = 0;*

*    byte[] barr = new byte[100];*

*    ret = fin.read(barr);*

*    out.print(ret);*

*    out.print("******************");

*    int idx = 0;*

*    while(idx < ret){*

*        out.print(barr[idx]);*

*        idx++;*

*    }*

*    fin.close();*

}

将获取的字节数组使用String的构造函数转换成String来显示:

public static void input() throws IOException{

*    FileInputStream fin = new FileInputStream("/kluter/temp/fileOutS");*

*    int ret = 0;*

*    byte[] barr = new byte[100];*

*    ret = fin.read(barr);*

*    out.print(ret);*

*    out.print("******************");

*    String s = new String(barr);*

*    out.print(s);*

*    fin.close();*

}

利用读取到的字节数,循环read到字节数组:

一定要注意!倒数第二次read的时候,不是刚好读取数组长度个字节的情况下,打印数组有倒数第三次read字节的情况,用**s = new String(barr, 0, ret);解决

public static void input() throws IOException{

*    FileInputStream fin = new FileInputStream("/kluter/temp/fileOutS");*

*    int ret = 0;*

*    String s = null;*

*    byte[] barr = new byte[3];*

*    while((ret = fin.read(barr)) != -1){*

*        out.println(ret);*

*        s = new String(barr, 0, ret);*

*        out.println(s);*

*    }*

*    fin.close();*

}

3. 文件复制

3.1. 单字节复制

public static void copy_byte() throws IOException{

*    FileInputStream fin = new FileInputStream("/kluter/temp/fileOutS");*

*    FileOutputStream fout = new FileOutputStream("/kluter/temp/fileCopy1", true);*

*    int ret = 0;*

*    while((ret = fin.read()) != -1){*

*        out.print((char)ret);*

*        fout.write(ret);*

*    }*

*    fin.close();*

*    fout.close();*

}

3.2. 字节数组复制

为了提高复制的效率,需要采用字节数组的方式来复制文件:

public static void copy_arr() throws IOException{

*    FileInputStream fin = new FileInputStream("/kluter/temp/fileOutS");*

*    FileOutputStream fout = new FileOutputStream("/kluter/temp/fileCopy2", true);*

*    int ret = 0;*

*    byte[] barr = new byte[6];*

*    String s = null;*

*    while((ret = fin.read(barr)) != -1){*

*        s = new String(barr, 0, ret);*

*        out.print(s);*

*        fout.write(barr);*

*    }*

*    fin.close();*

*    fout.close();*

}

总结:

为了演示,这里我没有加上IOexception的代码,但是工作中一定要加上

单个字节的操作,效率远远低于字节数组

读写中文用FileWriter和FilerReader类

Java IO 体系(二): inputstream与outputstream相关推荐

  1. Java I/O流InputStream,OutputStream,Reader,Writer

    Java流总结 原文地址:http://blog.csdn.net/oypj2010/article/details/7660150 一. 流的分类 – 输入流:只能从中读取字节数据,而不能向其写出数 ...

  2. java+io体系结构图_Java IO 体系结构

    Java IO体系结构看似庞大复杂,其实有规律可循,要弄清楚其结构,需要明白两点: 1. 其对称性质:InputStream 与 OutputStream, Reader 与 Writer,他们分别是 ...

  3. Java IO 体系(三):Reader与Writer

    正文 本篇讲述的是Java IO中的Reader类和Writer类.跟之前讲述的InputStream和OutputStream一样为IO流中的抽象父类之一,不过Reader和Writer的操作对象不 ...

  4. Java IO(二)Java IO简介及FileInput/FileOutputStream

    JAVA IO Java IO可以让我们用标准的读写操作来完成对不同设备的读写数据工作. Java将IO按照方向划分为输入与输出,参照点是我们写的程序. 输入:用来读取数据的,是从外界到程序的方向,用 ...

  5. Java IO 体系(一): 装饰者模式

    前言. IO中常见的使用方式 DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputSt ...

  6. java IO(二)—— 字符输入输出流

    javo. io. Reader:字符输入流 是字符输入流的最顶层的父类,定义了-些共性的成员方法,是一个抽象类 共性的成员方法: int read() 读取单个字符并返回. int read(cha ...

  7. Java IO(二)——RandomAccessFile

    一.RandomAccessFile RandomAccessFile类可以说是Java语言中功能最为丰富的文件访问类,它提供了众多的文件访问方法.RandomAccessFile类支持"随 ...

  8. Java IO实战操作(二)

    /** * 向文件中追加新内容 * @throws IOException */ public void NewInserNum() throws IOException { String fileN ...

  9. java io体系_java IO流的体系结构图

    常用字节流字符流 字节流   InputStream                                                                           ...

最新文章

  1. 高中上不上分数低学计算机,中考分数低该怎么办 上不了高中有什么出路
  2. matlab命名文件保存在哪里,用Matlab给整个文件夹下的文件分别重命名
  3. stm32之电源管理(实现低功耗)
  4. inrange函数_Python 初学者必备的常用内置函数
  5. ASP.NET笔记(三)
  6. matplotlib动画入门(1):基本概念
  7. python中必须使用import引入模块_Python之import方法引入模块详解
  8. VB 感染EXE 程序病毒源码
  9. javascript里new构造函数返回的值
  10. HTML5之FileList文件列表对象的应用,可批量上传
  11. 第6章:可维护性软件构建方法 6.1可维护性的度量和构造原则
  12. 在Centos7上配置docker运行DotNetCore项目
  13. 【我的OpenGL学习进阶之旅】Assimp库支持哪些3D模型格式?
  14. 互联网协议以及网络分层
  15. android程序表白,打造一款浪漫的Android表白程序
  16. labview能运行c语言程序吗,用labview软件编写一个程序能申请软件版权吗?
  17. centos7利用libreoffice将doc文件转换为pdf
  18. H3C认证网络工程师H3CNE
  19. 电脑桌面app客户端、微信公众号-小程序测试方法
  20. 为什么理工类专业成绩好的人,英语总是很差?

热门文章

  1. java画满天星_java_java实现的满天星效果实例,本文实例讲述了java实现满天星 - phpStudy...
  2. linux 音频路径,Linux系统中提取DVD音频的方法介绍(转)
  3. maven排除依赖包的子依赖_漫画谈一下Maven依赖
  4. sylog mysql_syslog-ng+loganalyzer搭建日志集中监控平台
  5. cnn 预测过程代码_FPN的Tensorflow代码详解——特征提取
  6. 关闭打开Excel弹出要安装“Microsoft.VisualStudio.QualityTools.LoadTestExcelAddIn.vsto”加载项
  7. ArcGIS Engine10.4版本
  8. oracle cbo 查询展开,Oracle CBO几种基本的查询转换详解
  9. mysql5.6创建用户并授予指定数据库或表权限
  10. iOS朋友圈,视频播放器、钓鱼小游戏、玻璃动画源码