java io流读写文件换行_java基础io流——OutputStream和InputStream的故事(温故知新)...
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的故事(温故知新)...相关推荐
- Java学习第十六天——字符流读写文件、字符缓冲流拷贝文件
字符流读写文件 字符流读数据-按单个字符读取 创建字符流读文件对象: Reader reader = new FileReader("readme.txt"); 调用方法读取数 ...
- C# IO流读写文件操作
C# IO流读写文件操作 1.创建文件流 2.创建文件读写器 3.执行读写操作 4.关闭文件读写器和文件流 1.创建文件流 string filePath = AppDomain.CurrentDom ...
- 第32天学习打卡(字符流读写文件,字节流读写文件)
字符流读写文件 创建字符流读文件对象: BufferedReader br = new BufferedReader(new FileReader("readme.txt")); ...
- python文件换行符_python3 读写文件换行符的方法
最近在处理文本文件时,遇到编码格式和换行符的问题. 基本上都是GBK 和 UTF-8 编码的文本文件,但是python3 中默认的都是按照 utf-8 来打开.用不正确的编码参数打开,在读取内容时,会 ...
- java 字符流读取_Java 字符流读写文件
据说,java读写文件要写很多,贼麻烦,不像c艹,几行代码就搞定.只能抄抄模板拿来用了. 输入输出流分字节流和字符流.先看看字符流的操作,字节转化为字符也可读写. 一.写入文件 1.FileWrite ...
- Java.IO 字符流读写文件
点击上方 IT牧场 ,选择 置顶或者星标 技术干货每日送达! 一.序 上一篇我们谈了 java.IO 文件字节流读写操作(能懂系列Java.io文件字节流读写)大家应该都很熟悉了.但是中文和英文在字符 ...
- java io 创建文件夹_Java中Io流操作-File类的常用操作-创建文件,创建文件夹
package com.hxzy.IOSer; import java.io.File; import java.io.IOException; public class Demo03 { publi ...
- java 界面文件操作系统_java基础图形界面和IO系统
1,java界面系统 事件的驱动编程:事件源,生成一个事件并触发他的组件称为事件源. 事件监听器.注册和事件处理:事件监听分类:分为GUI程序本身实现监听.使用成员内部内监听.匿名内部内监听:使用最多 ...
- 【Java高级特性】I/O流——使用字符流读写文件
1.使用字符流类BufferedReader读文本文件 BufferedReader和InputStreamReader两个类都是Reader抽象类的子类,FileReader类是InputStrea ...
最新文章
- 献上程序员大学四年珍藏的30个宝藏网站,全部拿出来
- 从时间管理聊到技术人如何保持竞争力?
- 《1---关于解决MySQL在控制台插入中文乱码问题》
- [原创]DebugTools系列(4):AQTime经验总结
- tensorflow一维卷积输入_tensorflow中一维卷积conv1d处理语言序列的一点记录
- 台达asda-b2伺服驱动器说明书_台达解决方案提升粉末冶金液压机的控制精度
- 代码 抠图_3 行 Python 代码 5 秒抠图的 AI 神器,根本无需 PS
- 最短路径 | 1087 三重标尺+记录最短路径条数
- [leetcode] 题型整理之动态规划
- 关于这个blog使用的问题?
- 搭建nginx服务器
- 代理ip,代理服务器等相关
- php后台框架整理集锦
- ISIS协议的基础配置实验,原来做ISIS基础配置还可以这么有趣
- zotero与Obsidian联动笔记(一):ob中直接调用zotero的文献,并生成笔记
- web前端一张页面多少钱?
- J2EE高级开发框架小课程之Spring框架1——Spring创建三种方式:使用无参构造器创建对象(bean标签的方式),使用静态方法创建对象,使用实例方法创建对象(非静态方法)
- GNSS测量与数据处理(第十周)
- 微信|QQ扫码登录网页版二维码失效问题解决方案 网站无法访问PC网页版如何解决 安卓软件历史版本下载 FV fooview悬浮球帮助教程
- 计算机基础学习记录4-2
热门文章
- XP`开机速度慢的解决方法
- 阿里云OSS 服务端签名后直传之分片上传(结合element-ui的upload组件)
- Python第二周 str的方法
- Android夜间模式的几种实现
- jetty 添加basic auth
- CentOS(5.8/6.4)linux生产环境若干优化实战------就爱运维
- MYSQL和ORACLE时区设置比较
- ShowAllPic--图片
- PLSQL developer 连接不上64位Oracle 的解决方法
- Kinect+OpenNI学习笔记之4(OpenNI获取的图像结合OpenCV显示)