IO流的作用:用于设备和设备之间的数据传输。

IO流的概念:流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。

IO流的分类:

   按照操作数据的类型分为两种: 字节流和字符流。

   按照流的方向: 输入流和输出流。

   按流的功能不同分为:节点流和处理流。

File类

File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名,判断指定文件是否存在、获得当前目录中的文件列表,创建、删除文件和目录等方法。

1.字节流

   字节流 : 读取的是文件的二进制数据,不会对二进制做处理。
       字节流类以InputStream(字节输入流)和OutputStream(字节输出流)为顶层类。它们都是抽象类。
      FileInputStream: 是InputStream的子类。

FileInputStream使用步骤:
    1.找到目标文件 
    2.建立通道
    3.[创建缓冲区]
    4.读取数据
    5.关闭资源

           //1.找目标文件
File file = new File("文件路径");
//2.建立通道
FileInputStream fileInputStream = new FileInputStream(file);
//3.创建一个缓冲区
byte[] b = new byte[1024]; //理论上设置的缓冲区越大 读取的效率越高
//4.读取数据
int count = 0;
while((count = fileInputStream.read(b))!=-1){
//String里面做了解码功能
System.out.println(new String(b,0,count));
}
//5.关闭资源
fileInputStream.close();

   FileOutputStream: 是OutputStream的子类。 

  FileOutputStream使用步骤:
    1.找到目标文件 
    2.建立通道
    3.[创建缓冲区]
    4.写入数据
    5.关闭资源

FileOutputStream使用的注意点:

    1.使用FileOutputStream写数据的时候,如果目标文件不存在,那么就会自己创建一个目标文件对象。

    2.使用FileOutputStream写数据的时候,如果目标文件存在,先将里面的数据清空,在写入数据。
    3.使用FileOutputStream写数据的时候,如果目标文件存在,想将数据在原有的基础上追加,这个时候就应该使用FileOutputStream(File file, boolean append) 构造方法, append如果为true表示可以追加数据,反之不信。
    4..使用FileOutputStream写数据的时候,用write(int a)方法写数据,虽然接收的是int ,但实际上只有一个字节的数据,操作的是低八位的二进制 ,其他的24位全部丢掉。

         //1.找目标文件
File file = new File(文件路径);
//2.创建一个通道
FileOutputStream outputStream = new FileOutputStream(file,true);
//3.创键一个字节数组
String str = "hello word";
//将字符串变为字节数组
byte[] b = str.getBytes(); //4.写入数据
outputStream.write(b);
//5.关闭资源
outputStream.close();        

2.字符流 :

 字符流 :读的也是二进制文件,他会帮我们解码成我们看的懂的字符。

  字符流 = 字节流 + 解码。

字符流分为:字符输入流和字符输出流。

使用字符输出流时记得关闭资源或刷新数据,否则写入的数据不存在。

         //1.找目标文件
File file = new File(文件路径);
//2.建立通道
FileWriter fileWriter = new FileWriter(file,true); //在文件后面继续追加数据
//3.写入数据
fileWriter.write("好好学习java");
//刷新
fileWriter.flush();
//4.关闭数据
//fileWriter.close();

字节流与字符流的区别:

   1.byte与char的区别,字节流使用的是 byte;

2.字节流时采用二进制的编码直接传输,用字符流则牵涉到本地系统的编码问题;

3.字节流按照8位传输,字符流按照16位传输,所以字符流可以读取中文。

 

3.对象输入输出流 : ObjectInputStream、ObjectOutoutStream 

使用注意点 :
           1.想要通过对象流读取或者写入对象到磁盘,需要使对象的所属类来实现Serializable接口 ,Serializable接口 没有方法只是作为哟个标记。
           2.当我改变类中的属性值,任然可以读取数据 ,需要设置serialVersionUID 为一个常量 :private static final long serialVersionUID = 1L;
           3.如果我不想将某个属性写入到磁盘 可以在用transient关键字来修饰。

IO流总结的更多相关文章

  1. Java基础之IO流

    很长时间都没有更新了,最近在补充JavaSE的一些细节部分 关于IO流的一些总结 首先要介绍的是File类,File类用于对文件和目录的一些操作 1.创建文件CreateNewFile() 2.对文件 ...

  2. Java中IO流,输入输出流概述与总结

    总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都是抽象类InputStream(字节输入 ...

  3. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  4. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  5. IO流

    流的概念和作用 学习JavaIO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特 ...

  6. Java IO流学习总结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  7. 揭开Java IO流中的flush()的神秘面纱

    大家在使用Java IO流中OutputStream.PrintWriter --时,会经常用到它的flush()方法. 与在网络硬件中缓存一样,流还可以在软件中得到缓存,即直接在Java代码中缓存. ...

  8. java IO流 之 其他流

    一.内存操作流(ByteArrayInputStream.ByteArrayOutputStream) (一).   public class ByteArrayInputStream extends ...

  9. java IO流 之 字符流

    字符是我们能读懂的一些文字和符号,但在计算机中存储的却是我们看不懂的byte 字节,那这就存在关于字符编码解码的问题.所以在学习Io流的字符流前我们先了解些关于编码问题. 一.字符集与字符编码 1.什 ...

随机推荐

  1. 带进度条的文件批量上传插件uploadify

    有时项目中需要一个文件批量上传功能时,个人认为uploadify是快速简便的解决方案. 先上效果图: 一. 下载uploadify 从官网下载uploadify的Flash版本(Flash版本免费,另 ...

  2. .NET开发邮件发送功能的全面教程(含邮件组件源码)

    今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知识 2)         ...

  3. iOS 4s-6Plus屏幕自动适配及颜色转换为十六进制

    iOS各种屏幕自动适配及颜色转换为十六进制 ★★★XLJMatchScreen自动适配屏幕★★★ 支持pod导入 pod 'XLJScreenMatching', '~> 1.0.3' 如果发现 ...

  4. C#设计模式-责任链模式

    在现实生活中,有很多请求并不是一个人说了就算的,例如面试时的工资,低于1万的薪水可能技术经理就可以决定了,但是1万~1万5的薪水可能技术经理就没这个权利批准,可能就需要请求技术总监的批准,所以在面试的 ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(34)-文章发布系统①-简要分析

    系列目录 最新比较闲,为了学习下Android的开发构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(1)-前言与,虽然有点没有目的的学习,但还是了解了Andro ...

  6. Android动画效果之Tween Animation(补间动画)

    前言: 最近公司项目下个版本迭代里面设计了很多动画效果,在以往的项目中开发中也会经常用到动画,所以在公司下个版本迭代开始之前,抽空总结一下Android动画.今天主要总结Tween Animation ...

  7. ASP.NET 5 - $.ajax post JSON.stringify(para) is null

    JavaScript 代码: var para = {}; para.id = $("#ad-text-id").val(); para.title = $("#ad-t ...

  8. 通过Matrix进行二维图形仿射变换

    Affine Transformation是一种二维坐标到二维坐标之间的线性变换,保持二维图形的"平直性"和"平行性".仿射变换可以通过一系列的原子变换的复合来 ...

  9. 原生JS封装Ajax插件(同域&&jsonp跨域)

    抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...

  10. Autofac 的属性注入,IOC的坑

    Autofac 是一款优秀的IOC的开源工具,完美的适配.Net特性,但是有时候我们想通过属性注入的方式来获取我们注入的对象,对不起,有时候你还真是获取不到,这因为什么呢? 1.你对Autofac 不 ...