io流概述:

IO流用来处理设备之间的数据传输,上传文件和下载文件,Java对数据的操作是通过流的方式,Java用于操作流的对象都在IO包中。

IO流分类

按照数据流向

输入流 读入数据

输出流 写出数据

按照数据类型

字节流

字符流

什么情况下使用哪种流呢?

如果数据所在的文件通过windows自带的记事本打开并能读懂里面的内容,就用字符流,其他用字节流。

如果你什么都不知道,就用字节流。

IO流常用基类

字节流的抽象基类:

InputStream ,OutputStream。

字符流的抽象基类:

Reader , Writer。

注:

由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。

如:InputStream的子类FileInputStream。

如:Reader的子类FileReader。

OutputStream的子类FileOutputStream

构造方法:

FileOutputStream(File file)

FileOutputStream(String name)

推荐第二种构造方法:FileOutputStream outputStream = new FileOutputStream("a.txt");

创建字节输出流对象了做了几件事情:A:调用系统功能去创建文件

B:创建outputStream对象

C:把foutputStream对象指向这个文件

通过字节输出流写出数据到文本public void write(int b)public void write(byte[] b)public void write(byte[] b,int off,int len)

从方法中可看出,只能通过字节写出outputStream.write("hello".getBytes()); 文本中出现hello

outputStream.write(96)  //文本中出现 abyte[] bys={97,98,99,100,101};

outputStream.write(bys,1,3); 文本中出现bcd

如此写出,文本中数据不会换行,不会追加,每次写出都是覆盖原来。

追加:FileOutputStream outputStream = new FileOutputStream("a.txt",true);//第二个参数true设置为可追加。

换行 \n\r :for (int i = 0; i <5 ; i++) {

outputStream.write("hello".getBytes());

outputStream.write("\n\r".getBytes());

}

注:用完流一定要记得关闭。outputStream.close();

完整示例:package io2;import java.io.FileOutputStream;import java.io.IOException;/**

* new FileOutputStream("a.txt",true);  第二个参数true,设置为写入的数据拼接在尾部

* \n\r 换行

* write(bys,1,3);  写入字节数组

*/public class out {    public static void main(String args[]){

FileOutputStream outputStream = null;        try {            //FileOutputStream fos = new FileOutputStream(file);

outputStream = new FileOutputStream("a.txt",true);            /*

* 创建字节输出流对象了做了几件事情:

* A:调用系统功能去创建文件

* B:创建outputStream对象

* C:把foutputStream对象指向这个文件

*///            for (int i = 0; i <5 ; i++) {//                outputStream.write("hello".getBytes());//                outputStream.write("\n\r".getBytes());//            }

byte[] bys={97,98,99,100,101};

outputStream.write(bys,1,3);

} catch (IOException e) {

e.printStackTrace();

}        finally {            try {

outputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

InputStream的子类FileInputStream

FileInputStream的构造方法FileInputStream(File file)

FileInputStream(String name)

推荐第二种构造方法:FileInputStream inputStream = new FileInputStream("a.txt");

把刚才写的数据现在读取到控制台:public int read()public int read(byte[] b)

第一个read是读一个字节,第二个read是读一个字节数组。//读一个字节int by = 0;while ((by=inputStream.read())!=-1){

System.out.println((char)by);

}

读到没数据了就返回-1,这个用来判断是否读完。//读一个字节数组,一般是1024大小int len = 0 ;byte[] bys = new byte[1024];while ((len = inputStream.read(bys)) != -1) {

System.out.println(new String(bys,0,len));

}

两个read的返回值略有不同,read()返回读取的字节,读到末尾返回-1,read(byte[] b)返回的是读到的字节个数,读到的字节放在了bytes字节数组里,读到末尾没数据了返回-1。

两种读取方式图解:

image

同样的用完了流,也要及时的关闭,以防占用内存。inputStream.close();

完整示例:

建议以字节数组的方式读取数据。package io2;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;/**

* Create by stefan

* Date on 2018-05-27  23:00

* Convertion over Configuration!

*/public class input2 {    public static void main(String args[]){

FileInputStream inputStream = null;        try {

inputStream = new FileInputStream("a.txt");//            byte[] bys = new byte[4];//            int len = inputStream.read(bys);//            System.out.println(new String(bys));  //bcd//            System.out.println(len);  //3//            System.out.println(inputStream.read(bys));  //-1

int len = 0 ;            byte[] bys = new byte[1024];            while ((len = inputStream.read(bys)) != -1) {

System.out.println(new String(bys,0,len));

}            /**

*    public String(byte bytes[]) {

this(bytes, 0, bytes.length);

}

*/

} catch (IOException e) {

e.printStackTrace();

}finally {            try {

inputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

字节流复制文件

利用输入流读取一个文件里的字节,再利用输出流将读取到的字节写出到另一个文件中(不存在会自动创建)package io2;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Arrays;/**

* Create by stefan

* Date on 2018-05-27  23:19

* Convertion over Configuration!

*/public class copy {    public static void main(String args[]) throws IOException {

FileInputStream inputStream = new FileInputStream("E:\\huge1.jpg");

FileOutputStream outputStream = new FileOutputStream("E:\\古月.jpg");

byte[] bytes = new byte[1024];        int len = 0;        while ((len=inputStream.read(bytes)) != -1) {

outputStream.write(bytes,0,len);

}

inputStream.close();

outputStream.close();

}

}

作者:韵呀

链接:https://www.jianshu.com/p/63d1751d3eac

java io流读写文件换行_java基础io流——OutputStream和InputStream的故事(温故知新)...相关推荐

  1. Java学习第十六天——字符流读写文件、字符缓冲流拷贝文件

    字符流读写文件 字符流读数据-按单个字符读取 创建字符流读文件对象: ​ Reader reader = new FileReader("readme.txt"); 调用方法读取数 ...

  2. C# IO流读写文件操作

    C# IO流读写文件操作 1.创建文件流 2.创建文件读写器 3.执行读写操作 4.关闭文件读写器和文件流 1.创建文件流 string filePath = AppDomain.CurrentDom ...

  3. 第32天学习打卡(字符流读写文件,字节流读写文件)

    字符流读写文件 创建字符流读文件对象: BufferedReader br = new BufferedReader(new FileReader("readme.txt")); ...

  4. python文件换行符_python3 读写文件换行符的方法

    最近在处理文本文件时,遇到编码格式和换行符的问题. 基本上都是GBK 和 UTF-8 编码的文本文件,但是python3 中默认的都是按照 utf-8 来打开.用不正确的编码参数打开,在读取内容时,会 ...

  5. java 字符流读取_Java 字符流读写文件

    据说,java读写文件要写很多,贼麻烦,不像c艹,几行代码就搞定.只能抄抄模板拿来用了. 输入输出流分字节流和字符流.先看看字符流的操作,字节转化为字符也可读写. 一.写入文件 1.FileWrite ...

  6. Java.IO 字符流读写文件

    点击上方 IT牧场 ,选择 置顶或者星标 技术干货每日送达! 一.序 上一篇我们谈了 java.IO 文件字节流读写操作(能懂系列Java.io文件字节流读写)大家应该都很熟悉了.但是中文和英文在字符 ...

  7. java io 创建文件夹_Java中Io流操作-File类的常用操作-创建文件,创建文件夹

    package com.hxzy.IOSer; import java.io.File; import java.io.IOException; public class Demo03 { publi ...

  8. java 界面文件操作系统_java基础图形界面和IO系统

    1,java界面系统 事件的驱动编程:事件源,生成一个事件并触发他的组件称为事件源. 事件监听器.注册和事件处理:事件监听分类:分为GUI程序本身实现监听.使用成员内部内监听.匿名内部内监听:使用最多 ...

  9. 【Java高级特性】I/O流——使用字符流读写文件

    1.使用字符流类BufferedReader读文本文件 BufferedReader和InputStreamReader两个类都是Reader抽象类的子类,FileReader类是InputStrea ...

最新文章

  1. [洛谷P4626]一道水题 II
  2. 金碧辉煌!皇城定制5月22日正式对外运营开业!
  3. java内存模型之一
  4. 阿里云直播PHP SDK如何使用
  5. python网页运行环境_Python小牛叔Web开发1:安装Visual Studio Code配置Python运行环境...
  6. 维监控利器Nagios:概念、结构和功能
  7. 停止和删除Hasplms服务(二)--HASP运行环境
  8. 处理相对时间(Day.js、Moment.js)(案例:结合vue的过滤器使用)
  9. React之总结Ref
  10. String 源码解析
  11. java执行完main就结束了吗_为什么main方法中执行完第一个方法完之后,后面的代码都不执行了?...
  12. webpack转内联px为rem_Vuejs项目配置webpack将px自动转化为rem,适配移动端
  13. 计算机网络每日一题,【计算机考研】每日一题-数网操-35
  14. java过滤集合,java – 如何通过交集过滤集合集合?
  15. MyCat分库分表入门示例
  16. 数学建模1:lingo软件求解优化模型
  17. java 对象转json忽略某个属性
  18. mac环境下Android 反编译
  19. mysql置疑原因_数据库置疑的处理办法
  20. Apache+tomcat实现应用服务器集群

热门文章

  1. 搞懂这四个问题,企业数字化转型才可能成功
  2. SQL语句恢复数据库时一直显示“正在还原”
  3. mpvue生命周期初探
  4. XMLHttpRequest 对象
  5. IBM向客户发放了一批“染毒”的U盘,现紧急建议物理销毁
  6. python subprocess 模块
  7. 我理解的几种字符编码方式
  8. javascript:闭包的总结
  9. 如何设计Kafka?
  10. jaxws-webservice编程续