IO流和Properties

IO流

IO流是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口。它对于任何计算机系统都非常关键,

因而所有 I/O 的主体实际上是内置在操作系统中的。单独的程序一般是让系统为它们完成大部分的工作。

在 Java 编程中,一直使用流的方式完成 I/O。所有 I/O 都被视为单个的字节的移动,

通过一个称为 Stream 的对象一次移动一个字节。流 I/O 用于与外部世界接触。它也在内部使用,

用于将对象转换为字节,然后再转换回对象。输入也叫做读取数据,输出也叫做作写出数据。

概述

  • IO流是设备间的数据的传输.
  • IO流的输入和输出(基于程序的角度,而不是基于文件的角度)

IO流的分类

数据流向:

  • 输入流: 文件到程序
  • 输出流: 程序到文件

数据类型(计算机内的数据存储都是以字节的形式存储的):

  • 字节流: 所有的文件都可以使用字节流操作
  • 字符流: 在文本文件的读取的时候,我们需要将字节转化为字符.

几个字节表示一个字符? 不一定.

基类

数据流向:

  • 输入流:
  • 输出流:

数据类型:

  • 字节流:

    1. 字节输入流(InputStream):将内存中的数据输如入到指定的设备上
    2. 字节输出流(OutputStream):将设备上的数据输出到设备上
  • 字符流:
    1. 字符输出流
    2. 字符输入流

FileOutputStream

构造方法(如果指定的文件不存在,则创建对象;存在,会清空文件中的数据(除非使用后两个构造方法,字符流同理)):

  • public FileOutputStream(File file) :创建文件输出流以写入由指定的 File对象表示的文件。
  • public FileOutputStream(String name) : 创建文件输出流以指定的名称写入文件(name表示操作文件的路径)。
  • FileOutputStream(File file, boolean append) : 创建文件输出流以写入由指定的 File对象表示的文件,boolean类型表示是否追加内容。
  • FileOutputStream(String name, boolean append) : 创建文件输出流以指定的名称写入文件,boolean类型表示是否追加内容。

常用方法:

  • void write(int b) : 将指定的字节写出到文件中(97 -> a)。
  • void write(byte[] b) : 将字节数组中的字节写出到文件中。
  • void write(byte[] b, int off, int len) : off表示字节数组起始的索引位置,输出len个字节长度到文件中的
  • void close() : 关闭此文件输出流并释放与此流相关联的任何系统资源。

使用步骤:

  1. 创建流

  2. 写入流

  3. 关闭流

     public static void main(String[] args) throws Exception {
    // 使用构造方法创建FileOutputStream对象
    FileOutputStream fos = new FileOutputStream("F:\\bbb\\wangzhi.txt");
    // FileOutputStream fos2 = new FileOutputStream(new File("F:\\bbb\\wangzhi.txt")); // 调用write方法向文件中输出内容
    // int字节,查询ASICC表
    fos.write(97);
    fos.write(65);
    fos.write(98);
    fos.write(66);
    fos.write(99); fos.write(new byte[]{67,100,68}); fos.close();
    }

FileInputStream

构造方法(文件必须存在,不存在抛异常):

  • FileInputStream(File file) : 通过打开与实际文件的连接创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
  • FileInputStream(String name) : 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。

常用方法:

  • int read() : 从该输入流读取一个字节的数据。

  • int read(byte[] b) : 从该输入流读取最多 b.length个字节的数据为字节数组(返回的是读取到的字节的个数)。

  • void close() : 关闭此文件输入流并释放与流相关联的任何系统资源。

      // 使用字节流复制图片
    public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("D:\\美女.jpg"); FileOutputStream fos = new FileOutputStream("F:\\bbb\\美女.jpg"); /*long start = System.currentTimeMillis();
    byte[] arr = new byte[1024 * 4];
    int len;
    while((len = fis.read(arr)) != -1){
    fos.write(arr,0,len);
    }
    long end = System.currentTimeMillis();
    System.out.println(end - start);*/ byte[] arr1 = new byte[1024 * 4];
    int len1;
    StringBuilder sb = new StringBuilder();
    while((len1 = fis.read(arr1)) != -1){
    sb.append(new String(arr1,0,len1));
    }
    fos.write(sb.toString().getBytes()); /*System.out.println(System.currentTimeMillis() - end);*/
    fos.close();
    fis.close(); }

字符流

使用字节流去读中文(一个中文占据3个字节)可能出现乱码.

  • Writer: 写数据的流

    1. FileWriter
  • Reader: 读数据的流
    1. FileReader

FileReader

构造方法:

  • FileReader(String fileName)

    创建一个新的 FileReader ,给定要读取的文件的名称。
  • FileReader(File file)

    创建一个新的 FileReader ,给出 File读取。

常用方法:

  • int read()

    读一个字符
  • int read(char[] cbuf)

    将字符读入数组。
  • void close()

    关闭流并释放与之相关联的任何系统资源。

FileWriter

构造方法:

  • FileWriter(File file)

    给一个File对象构造一个FileWriter对象。
  • FileWriter(File file, boolean append)

    给一个File对象构造一个FileWriter对象。
  • FileWriter(String fileName)

    构造一个给定文件名的FileWriter对象。
  • FileWriter(String fileName, boolean append)

    构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。

常用方法:

  • void write(char[] cbuf)

    写入一个字符数组。

  • void write(int c)

    写一个字符

  • void write(String str)

    写一个字符串

  • void write(String str, int off, int len)

    写一个字符串的一部分。

  • void flush()

    刷新流。

  • void close()

    关闭流,先刷新。

      // 复制txt文件
    public static void main(String[] args) throws IOException {
    // 创建字符输入流
    FileReader fr = new FileReader("wangzhi.txt"); // 创建字符输出流
    FileWriter fw = new FileWriter("wangzhi2.txt"); // 读取资源
    char[] arr = new char[1024];
    int len;
    StringBuilder sb = new StringBuilder();
    while((len = fr.read(arr)) != -1){
    sb.append(arr);
    }
    fw.write(sb.toString()); // 关闭流
    fw.close();
    fr.close();
    }

Java之IO流(字节流,字符流)的更多相关文章

  1. IO流(字节流,字符流,缓冲流)

    一:IO流的分类(组织架构) 根据处理数据类型的不同分为:字节流和字符流 根据数据流向不同分为:输入流和输出流   这么庞大的体系里面,常用的就那么几个,我们把它们抽取出来,如下图:   二:字符字节 ...

  2. java 输入输出IO流 字节流| 字符流 的缓冲流:BufferedInputStream;BufferedOutputStream;BufferedReader(Reader in);BufferedWriter(Writer out)

    什么是缓冲流: 缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率. 图解: 1.字节缓冲流BufferedInputStr ...

  3. IO 复习字节流字符流拷贝文件

    /* 本地文件 URL 文件拷贝 *//*文本文件拷贝 可以通过 字符流,也可以通过字节流*/ /*二进制文件拷贝 只可以通过字节流*//* 希望这个例子能帮助搞懂 字符流与字节流的区别 */ imp ...

  4. IO—》字节流&字符流

    字节流 一.字节输出流OutputStream OutputStream此抽象类,是表示输出字节流的所有类的超类.操作的数据都是字节,定义了输出字节流的基本共性功能方法. FileOutputStre ...

  5. Java文件(io)编程——文件字符流的使用

    案例1: 读取一个文件并写入到另一个文件中,char[] 来中转. 首先要在E盘下创建一个文本文档,命名为test.txt,输入一些字符串. public class Demo_5 { public ...

  6. -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流

      File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...

  7. java IO流 之 字符流

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

  8. java io流(字符流) 文件打开、读取文件、关闭文件

    java io流(字符流) 文件打开 读取文件 关闭文件 //打开文件 //读取文件内容 //关闭文件 import java.io.*; public class Index{ public sta ...

  9. JAVA之IO流(字符流)

    字符流InputStreamReader和OutputStreamWriter是Writer和Read的子类:是字节流通向字符流的桥梁,也就是可以把字节流转化为字符流. InputStreamRead ...

随机推荐

  1. Netty源码分析第7章(编码器和写数据)---->第2节: MessageToByteEncoder

    Netty源码分析第七章: Netty源码分析 第二节: MessageToByteEncoder 同解码器一样, 编码器中也有一个抽象类叫MessageToByteEncoder, 其中定义了编码器 ...

  2. HTML学习1-Dom之事件绑定

    事件: 1.注册事件 a. <div onxxxx=””></div> b. document  .onxxxx= function()  //找到这个标签 2.this,触发 ...

  3. Xavier——Understanding the difficulty of training deep feedforward neural networks

    1. 摘要 本文尝试解释为什么在深度的神经网络中随机初始化会让梯度下降表现很差,并且在此基础上来帮助设计更好的算法. 作者发现 sigmoid 函数不适合深度网络,在这种情况下,随机初始化参数会让较深 ...

  4. iOS 开发中,关于xxx.xcodeproj 文件冲突的解决方案 (以后谁不会了,直接将连接给他)

    iOS 开发中,关于xxx.xcodeproj 文件冲突的解决方案 (一有冲突要手把手教一遍,太麻烦了,现在总结下,以后谁不会了,连接直接发他). 关于xxx.xcodeproj 文件冲突的话,是比较 ...

  5. 输入一个URL到页面呈现其中发生的过程-------http过程详解

    在我们点击一个网址,到它能够呈现在浏览器中,展示在我们面前,这个过程中,电脑里,网络上,究竟发生了什么事情. 服务器启动监听模式 那我们就开始了,故事其实并不是从在浏览器的地址栏输入一个网址,或者我们 ...

  6. jsweb常用代码

    <script> $(function (){ $.ajax({ url: 'https://test.com:8080/api/v1/users?query_not_auth=100&a ...

  7. JAVA第一次实验 ——凯撒密码

    课程:Java程序设计 班级:1352 姓名:黄伟业 学号:20135215 成绩:            指导教师:娄嘉鹏  实验日期:2015.4.15 实验密级: 预习程度:  实验时间:19: ...

  8. 校友聊---Sprint计划会议总结

    1.产品需求及索引卡: 校友聊的软件我们计划分三步进行设计实现功能:文字聊天.语音聊天.视频聊天.首先第一步我们要实现文字聊天这个功能. 经过调研讨论之后,确定了产品的几个需求:在局域网内实现通信要依 ...

  9. 在新的电脑上部署 Hexo,保留原有博客的方法

    用U盘从旧的电脑拷贝整个blog文件夹. 在新的电脑上装好git并配置好用户名和密钥. 安装 node.js 安装 hexo:npm install hexo-cli -g 用U盘把blog文件夹拷贝 ...

  10. B-tree&B+tree&数据库索引原理

    B-tree&B+tree:https://www.cnblogs.com/vianzhang/p/7922426.html 数据库索引原理:https://www.cnblogs.com/a ...