java IO操作,看完你应该就清晰了。
前言:
java中IO里的一些知识对于一个java新手来说,是比较难理解的。因为里面存在一些很绕的概念,比如:
1.到底是读入写出,还是读出写入;
2.我要将一个文件的内容拷贝到另一个文件是先用InputStream还是OutputStream;
3.什么时候用FileInputStream,什么时候用ByteArrayInputStream,什么时候又用StreamBufferInputStream;
要印象深刻的解决这些问题,还是那句话,得从理解出发。
正题:
对于IO的基础知识模型,分类,及各个类的特性相信有很多的帖子说的很详细了,本文就不再赘述了。
首先我们阐述一个聊天的概念,举个例子,假如你现在在跟小明聊天,小明在给你倾述他失恋了有多么多么难受,是不是他心里有一堆话然后通过嘴巴表达出来。然后你在认真的聆听并且感受他的难受,是不是通过耳朵接收然后放到心里去感受。
好了,我们把这个场景放到程序里面如下图:

(请先放弃你们的审美,这样你才能认出耳朵和嘴巴)
这里有四个节点,每个节点都有自己的职责,首先如果小明的嘴巴要表达他心里的难受需要去读取心里的内容,我们知道读取我们都用read()方法。InputStream才有read()方法,所以这时我们肯定是用InputStream。当你的耳朵接收到小明表达的内容后,需要写到你的心里去,这是我们要用到write()方法,可想而知是用OutputStream。
到这里我们回到上面的问题,其实是一个读出写入的过程,然后我们把两个心看成两个file,那么要把小明的内容copy到你的心里就分以下步骤:
1.创建小明心的FileInputStream,然后调用它的read()方法,把读到的内容放到Byte[]中。
2.创建你心的FileOutputStream,然后调用write()方法,把上一步Byte[]中的内容写到你心里去。
以下测试场景可以对照测试:
创建两个文件xiaoming's-heart.txt和your-heart.txt并且在xiaoming's-heart.txt中输入内容

然后执行以下码
public static void main(String[] args){
File xiaomingFile = new File("E:/testFile/xiaoming's-heart.txt");
File yourFile = new File("E:/testFile/your-heart.txt");
try {
InputStream is = new FileInputStream(xiaomingFile);
OutputStream os = new FileOutputStream(yourFile);
byte[] buffer = new byte[4096];
int readLen = 0;
while ((readLen = is.read(buffer, 0, 4096)) >= 0) {
System.out.print((char)readLen);
os.write(buffer, 0, readLen);
os.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
结果

我们可以看到,xiaoming's-heart.txt文件中的内容已经copy到your-heart.txt,这是一个很简单的例子,知识方便大家理解上面的理论场景
至于什么时候该用什么流其实只需要根据不同源和目的地选择即可。
总结:
本文只是帮助一些深陷其中的朋友简单理解一下java的io操作,希望简单的场景能让大家有一个清晰的理解。涉及的内容很少。其他io相关知识可以通过其他网络资料获取。
java IO操作,看完你应该就清晰了。的更多相关文章
- Java基础?看完以后再也不惧怕面试了
前言 这篇文章主要是Java基础部分,主要分为3个部分:Java集合.Java多线.JVM:这些东西帮助我面试成功率提升了很多.后面还有中间件Spring.Redis.RocketMQ等等吧,祝愿大家 ...
- JAVA—IO操作
一.JAVA I/O 输入输出流 1:编码问题 2:File类的使用 3:RandomAccessFile的使用 4:字节流的使用 5:字符流的使用 6:对象的序列化和反序列化 2: file类的使用 ...
- java IO操作:FileInputStream,FileOutputStream,FileReader,FileWriter实例
FileInputStream <span style="font-family:Verdana;">import java.io.File; import java. ...
- Java IO操作——数据操作流DataOutputStream和DataInputStream的使用
学习目标 掌握DataOutputStream和DataInputStream的作用 可以使用DataOutputStream和DataInputStream写入和读入数据 数据操作流 在io包中, ...
- Java IO操作:合并流
合并流:把两个文件合并在一起. 主要操作的是内容. 定义: public class SequenceInputStreamextends InputStream 方法摘要: 操作步骤: 1,分别建立 ...
- JAVA IO操作:数据操作流:DataOutputStream和DataInputStream
掌握DataOutputStream和DataInputStream的作用. 可以使用DataOutputStream和DataInputStream写入和读取数据. 在IO包中提供了两个与平台无关的 ...
- java IO操作和计算操作:工作内存和主内存 volatile关键字作用;原子操作对象AtomicInteger ....
应该停止但无法停止的计算线程 如下线程示例,线程实例中while循环中的条件,在主线程中通过调用实例方法更新后,while循环并没有更新判断变量是否还成立.而是陷入了while(true)死循环. i ...
- Java IO操作
转自:http://www.cnblogs.com/jyan/articles/2505791.html Johnny Yan的博客 1 InputStream类型 InputStream的作用是标志 ...
- 每天进步一点点-Java IO操作-Java Serializable(对象序列化)的理解和总结
往硬盘文件里写数据 序列化:序列化是将对象转换为容易传输的格式的过程.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.在另一端,反序列化将从该流重 ...
随机推荐
- C/C++入门
C:面向过程-函数 C++:面向对象-类:向下兼容C 程序包含头文件+主函数 简单数据类型 long long型赋超过int型范围的初值,需要在初值后面加上LL,否则可能会编译错误 不要使用float ...
- MFC对文件文件夹转移、删除、重命名、复制【转】
HFileOperation()函数主要对文件夹有四种操作:复制,删除,移动,重命名. 写了四个函数.可以很好的对文件夹进行操作. //函数名:MoveFolder //参数:lpszFromPath ...
- (1)用 if语句 区间判断
/*此例子只做比喻演示*/ 1 #include <stdio.h> 2 int main() 3 { 4 5 int p; 6 scanf("%d",&p); ...
- Linux命令(三)vim编辑器的常用命令
.subTitle { background: rgba(51, 153, 0, 0.53); border-bottom: 1px solid rgba(0, 102, 0, 1); border- ...
- Recuva ——天下第一的删除恢复应用
天下第一的删除恢复应用 下载地址 http://www.onlinedown.net/soft/66224.htm 实名diss那个垃圾 易得恢复 98一年,真是趁火打劫(跟个老鼠一样, ...
- STM32—SPI详解
目录 一.什么是SPI 二.SPI协议 物理层 协议层 1.通讯时序图 2.起始和停止信号 3.数据有效性 4.通讯模式 三.STM32中的SPI 简介 功能框图 1.通讯引脚 2.时钟控制逻辑 3. ...
- SQL 练习30
查询所有学生的课程及分数情况(存在学生没成绩,没选课的情况) SELECT Student.*,CId,score from Student LEFT JOIN SC ON Student.SId = ...
- NOIP 模拟 $18\; \rm 炼金术士的疑惑$
题解 \(by\;zj\varphi\) 高斯消元 根据高中化学知识,求解方程的就是一直方程凑出来的,焓值也一样 那么对于要求的方程和一直方程,我们做一次高斯消元,以每个物质为未知数,因为它保证有解, ...
- .net 温故知新:【5】异步编程 async await
1.异步编程 异步编程是一项关键技术,可以直接处理多个核心上的阻塞 I/O 和并发操作. 通过 C#.Visual Basic 和 F# 中易于使用的语言级异步编程模型,.NET 可为应用和服务提供使 ...
- 微信小程序全局数据globalData的使用问题
如果在A页面设置全局属性,但在B页面无法使用的话,可能是这个问题: app.js globalData: { helpPage:0, }, A页面 A(e) { getApp().globalData ...