Java io 入门
前言
在曾今的面试中被问到了io流,nio,还有如今经常听到的netty,io流还能答上一点,其他的一概不知怎么回答;
最近在公司也没事干,正好学习到了io流,就来整理一下吧;
这是Java io流的类图,网上很多,我也是截图的网上的

代码演练
为了直接练习,文中所有涉及到的文件都是先创建好的;
字符流
带有Reader,Writer的都属于字符流
一般是对纯文本进行操作,是以字符为单位读取文本文件,所以以下的实例都是定义的
char数组根据码表映射字符,一次可能读多个字节。
FileReader,FileWriter:
直接对文件操作
FileReader fileReader=null;
FileWriter fileWriter=null;
File readfile=new File("E:/Javaio"+File.separator+"Javastudy.txt");
File writefile=new File("E:/Javaio/a"+File.separator+"test.txt");
try {
fileReader= new FileReader(readfile);
fileWriter=new FileWriter(writefile);
char[] read=new char[1024];
int len=0;
while ((len=fileReader.read(read))!=-1){
fileWriter.write(read,0,len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (fileReader!=null){
fileReader.close();
}
if(fileWriter!=null){
fileWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
BufferedReader,BufferedWriter:
将文件操作的流放入缓冲区,在进行处理
BufferedReader可以对文本一行一行的读取,但是输出的时候需要自己进行隔行,不然数据都会紧紧的挨在一起;
try {
File reader = new File("E:/Javaio" + File.separator + "Javastudy.txt");
File writer = new File("E:/Javaio/a" + File.separator + "test.txt");
BufferedReader bufferedReader = new BufferedReader(new FileReader(reader));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(writer));
char[] read=new char[1024];
int len;
while ((len=bufferedReader.read(read))!=-1){
bufferedWriter.write(read,0,len);
}
/* String line;
while ((line=bufferedReader.readLine())!=null){
bufferedWriter.write(line);
bufferedWriter.newLine();
}*/
bufferedWriter.flush();
bufferedReader.close();
bufferedWriter.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
注意:这里调用了flush方法,因为改代码段使用了缓冲,缓冲区的数据只有存满了才会自动发送,这里尾存满需,要调用该方法将缓冲区的数据发送出去,不然文本中会没有数据;
InputStreamReader,OutputStreamWriter:
将字节流转换为字符流,在进行处理;
File reader = new File("E:/Javaio" + File.separator + "Javastudy.txt");
File writer = new File("E:/Javaio/a" + File.separator + "test.txt");
try {
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(reader));
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(writer));
char[] read=new char[1024];
int len;
while ((len=inputStreamReader.read(read))!=-1){
outputStreamWriter.write(read,0,len );
}
inputStreamReader.close();
outputStreamWriter.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
字节流
FileInputStream,FileOutputStream
直接读文件进行操作
try {
/* //图片
File inputstream = new File("E:/Javaio" + File.separator + "1.png");
File outputstream = new File("E:/Javaio/a" + File.separator + "1.png");*/
//音乐
File inputstream = new File("E:/Javaio" + File.separator + "test.mp3");
File outputstream = new File("E:/Javaio/a" + File.separator + "test.mp3");
if(outputstream.exists()){
outputstream.createNewFile();
}
FileInputStream fileInputStream = new FileInputStream(inputstream);
FileOutputStream fileOutputStream = new FileOutputStream(outputstream);
byte[] read=new byte[1024];
int len;
while ((len=fileInputStream.read(read))!=-1){
fileOutputStream.write(read,0,len);
}
fileInputStream.close();
fileOutputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
BufferedInputStream,BufferedOutputStream
将文件操作流放入缓冲区再进行操作
因为是对文件直接操作,所以无法一行一行的读取;也没有那个方法;
/* //图片
File inputstream = new File("E:/Javaio" + File.separator + "1.png");
File outputstream = new File("E:/Javaio/a" + File.separator + "1.png");*/
//音乐
File inputstream = new File("E:/Javaio" + File.separator + "test.mp3");
File outputstream = new File("E:/Javaio/a" + File.separator + "test.mp3");
if (outputstream.exists()) {
outputstream.createNewFile();
}
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(inputstream));
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(outputstream));
byte[] read=new byte[1024];
int len;
while ((len=bufferedInputStream.read(read))!=-1){
bufferedOutputStream.write(read,0,len);
}
bufferedOutputStream.flush();
bufferedInputStream.close();
bufferedOutputStream.close();
注意:这里使用了缓冲,需要调用flush方法;
ObjectOutputStream,ObjectInputStream
将对象持久化到本地TXT文件,注意,在TXT文件中的是二进制代码,并不是乱码;所以不要认为是乱码;
User user=new User();
user.setUsername("username");
user.setPassword("password");
File out=new File("E:/Javaio/a"+File.separator+"object.txt");
if(out.exists()){
out.createNewFile();
}
ObjectOutputStream outs=new ObjectOutputStream(new FileOutputStream(out));
outs.writeObject(user);
outs.close();
ObjectInputStream inputStream=new ObjectInputStream(new FileInputStream(out));
System.out.println(inputStream.readObject());
inputStream.close();
其他还有很多类和方法没有写,这里只进行入门的操作;代码部分就到这里了;
总结
io流
io流分类
- 根据流向来分:输入流和输出流
- 根据处理类型来分:字节流和字符流
输入输出流
输入流只能进行读操作,输出流只能进行写操作
字节流和字符流
- 字节流可以对所有文件进行操作,例如:图片,音乐文件,电影等;字符流只处理文本文档,例如TXT文本,xml,yml等
- 字节流是以字节为单位,字符流是以字符为单位,可以看到上边的字符流的代码中全是用的
char数组,而字节流中全是用的byte数组
这里面的内容非常详细;
Java io 入门的更多相关文章
- java IO 入门例子
import java.io.File; /** * File类型基本操作 */ /** * @author Administrator * */ public class FileDemo { /* ...
- Java IO入门
目录 一. 数据源(流) 二. 数据传输 三. 总结 我们从两个方面来理解Java IO,数据源(流).数据传输,即IO的核心就是对数据源产生的数据进行读写并高效传输的过程. 一. 数据源(流) 数据 ...
- Java IO(十一) DataInputStream 和 DataOutputStream
Java IO(十一) DataInputStream 和 DataOutputStream 一.介绍 DataInputStream 和 DataOutputStream 是数据字节流,分别继承自 ...
- Java api 入门教程 之 JAVA的IO处理
IO是输入和输出的简称,在实际的使用时,输入和输出是有方向的.就像现实中两个人之间借钱一样,例如A借钱给B,相对于A来说是借出,而相对于B来说则是借入.所以在程序中提到输入和输出时,也需要区分清楚是相 ...
- Java IO学习笔记八:Netty入门
作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+ ...
- Java IO使用入门
总体结构 IO应该是平时项目里最常用到的功能了,无论是简单的文件读取,还是服务器端口监听,都会用到IO:但是,在面对Java IO包里庞杂的IO基础类库时,经常会很头大,是该选择InputStream ...
- Java入门系列(十)Java IO
概述 总体而言,java的读写操作又分为两种:字符流和字节流. 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件. 什么是流? ...
- Java入门:Java IO概括
I/O 问题是任何编程语言都无法回避的问题,可以说 I/O 问题是整个人机交互的核心问题,因为 I/O 是机器获取和交换信息的主要渠道.在当今这个数据大爆炸时代,I/O 问题尤其突出,很容易成为一个性 ...
- 关于spark入门报错 java.io.FileNotFoundException: File file:/home/dummy/spark_log/file1.txt does not exist
不想看废话的可以直接拉到最底看总结 废话开始: master: master主机存在文件,却报 执行spark-shell语句: ./spark-shell --master spark://ma ...
随机推荐
- 亲子编程玩Micro:bit-动力小车“麦昆”
少儿编程之风已经吹进各大城市,编程猫.乐博机器人.童程童美等专业培训机构逐渐进入大家的视野,年龄段已经从K12逐渐降低到幼儿园中班.其实,少儿编程的门槛并不高,它不会让孩子一上手就去接触代码,而是会通 ...
- [转] kaldi中FST的可视化-以yesno为例
http://blog.csdn.net/u013677156/article/details/77893661 1.kaldi解码过程 kaldi识别解码一段语音的过程是:首先提取特征,然后过声学模 ...
- AJAX从入门到放弃(二)
XHR 响应 由 driventokill 创建,路飞 最后一次修改 2015-09-25 AJAX - 服务器 响应 由于 HTTP 响应是由服务端发出的,并且服务器做出响应需要时间(比如网速慢等原 ...
- css浮动(float)及清除浮动的几种实用方法
CSS浮动是现在网页布局中使用最频繁的效果之一,而浮动可以帮我们解决很多问题,那么就让我们一起来看一看如何使用浮动. 一.css浮动(float) (1)html文档流 自窗体自上而下分成一行一行,并 ...
- 盘点和反思在微信的阴影下艰难求生的移动端IM应用
本文原作者:李越,由银杏财经原创发布,本次内容改动. 1.前言 上线一周完成1.5亿元融资,上线10天总激活用户数超400万,8月29日单日新增用户超100万,这是子弹短信交出的最新成绩单(详见< ...
- knn算法的c语言实现
最近研究KNN,找到了一些优秀的源码,贴出来,做个笔记吧. #include<stdio.h> #include<stdlib.h> #include<math.h> ...
- 小程序入口构造工具&二维码测试工具
小程序入口构造工具&二维码测试工具 本文将介绍我们小程序中隐藏的两个工具页面.原理虽不复杂,收益却实实在在,或许也能给诸君带来启发. 入口构造工具 痛点 PM&运营 投放链接 PM&a ...
- 【spring boot】idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到(转)
转自:https://www.cnblogs.com/sxdcgaq8080/p/7727249.html 接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p ...
- rest-framework之解析器
解析器 解析器的作用 根据请求头 content-type 选择对应的解析器对请求体内容进行处理. 有application/json,x-www-form-urlencoded,form-data等 ...
- python不同开根号速度对比
import time import math import numpy as np def timeit1(): s = time.time() for i in range(750000): z= ...