IO流中的IO是Input,Output,输入和输出的意思,是用来处理设备与设备之间的数据传输的,不仅能处理内部设备(比如CPU、GPU、内存),还能处理外部设备(比如手机和PC,客户端与服务器)。

在Java中定义数据按照流向,分为输入流和输出流。

首先我们来了解输入流,从字面上就很容易理解,凡是从外部流入的数据都可以通过输入流来处理。比如读取文件。

输出流,就表示从内部流出的数据,比如:我们编辑了一个文本文件,当我们按下ctrl+s的时候,就将该文件从内存保存到了硬盘,这就是一个将数据从内存中输出到硬盘的过程。

除了输出和输入流,流按照操作的数据还分为:字节流和字符流。

复制一个文本文件,现在我们就来将D盘下hello.txt文件复制到E盘下,并重命名为abc.txt

FileReader fr = new FileReader("D://hello.txt"); //定义FileReader读取文件
int len = 0; //每次读取的字符数量
char[] cbuf = new char[1024]; //每次读取数据的缓冲区
 
FileWriter fw = new FileWriter("E://abc.txt"); //定义FileWriter写文件
while((len = fr.read(cbuf)) != -1){
fw.write(cbuf,0,len);
}
fw.close(); //释放资源 刷新缓冲区
fr.close();

如果要对非文本类型的文件进行操作,应该怎么做呢?这个时候字符流还能不能派上用场呢?

答案是否定的,字符流只适用于操作字符类型的文件,不能操作非字符类型的。

所以这个时候应该用什么来操作呢?字节流

字节流来操作非字符类文件。

使用字节流来复制一个图片文件

FileInputStream fs = new FileInputStream("D://user.jpg"); //定义文件输入流读取文件信息
FileOutputStream fos = new FileOutputStream("E://new.jpg");//定义文件输出流写文件
 
int len = 0; //每次读取数据的长度
byte[] bys = new byte[1024]; //数据缓冲区
 
while( (len = fs.read(bys)) != -1){
fos.write(bys, 0, len);
}
 
//释放资源 刷新缓冲区
fs.close();
fos.close();

  1. 字节流既然可以用来读取非字符构成的文件,那可以读取字符类型的文件吗? 答案是可以的,字节流可以操作所有类型的文件,因为计算机中的数据都是以字节的方式存储的;

  2. 既然字节流可以用来操作所有的文件,那还要字符流干啥咧? 因为字符流操作字符类型的数据和文件要比字节流快很多。

使用BufferedReader读取字符文件的速度要比我们之前使用的字节流和FileReader快很多,示例代码:

BufferedReader bf = new BufferedReader(new FileReader("D://hello.txt"));
BufferedWriter writer = new BufferedWriter(new FileWriter("D://abc.txt"));
 
String str = "";
 
while( (str = bf.readLine()) != null){
writer.write(str);
}
 
bf.close();
writer.close();

JAVA文件写入写出相关推荐

  1. JAVA文件写入FileWriter

    JAVA文件写入FileWriter 导包import java.io.FileWriter创建构造方法public FileWrite(String filename),参数是文件的路径及文件名(默 ...

  2. 一文搞定C#关于NPOI类库的使用读写Excel以及io流文件的写出

    一文搞定C#关于NPOI类库的使用读写Excel以及io流文件的写出 今天我们使用NPOI类库读写xlsx文件, 最终实现的效果如图所示 从太平洋官网下载相应的类库,大概4~5MB,不要从github ...

  3. 在一个java文件中写多个类

    参考文章地址: 一. 在一个java文件中写多个类   http://blog.csdn.net/u013614319/article/details/51510515 二.一个java文件中多个类 ...

  4. Java Stream如何写出高雅又装*的代码

    Java Stream如何写出高雅又装*的代码 一. 冷静分析 二. 直接开装 2.1 初级炫 2.2 普通炫 2.3 高级炫 2.4 再炫一波 拿到当前key与对应的数量 2.5 Map Reduc ...

  5. java写入写出文件的原理_Java文件断点续传实现原理解析

    一.作用: 随机流(RandomAccessFile)不属于IO流,支持对文件的读取和写入随机访问. 二.随机访问文件原理: 首先把随机访问的文件对象看作存储在文件系统中的一个大型 byte 数组,然 ...

  6. java文件写入不覆盖_java写入文件不覆盖写入_Java写入文件–用Java写入文件的4种方法...

    java写入文件不覆盖写入 Java provides several ways to write to file. We can use FileWriter, BufferedWriter, ja ...

  7. pandas合并文件夹下带有多个sheet的xlxs文件并写出csv文件

    之前写过用普通python库来合并文件,现在加强读写速度用pandas库来执行. 如果只读一个多sheet的excel文件,见代码1 代码1: #!/usr/bin/python3 # -*- cod ...

  8. Java编程中写出好代码的建议

    最近在做应用的性能优化,在review代码的过程中积累了一些规则和经验.做到这些规则的目的很简单,就是写出"优美"的代码来. 1.注释尽可能全面 对于方法的注释应该包含详细的入参和 ...

  9. Java编程中写出好代码的建议(转发)

    最近在做应用的性能优化,在review代码的过程中积累了一些规则和经验.做到这些规则的目的很简单,就是写出"优美"的代码来. 1.注释尽可能全面 对于方法的注释应该包含详细的入参和 ...

最新文章

  1. mysql通用分页_MySQL海量数据的通用存储过程分页代码
  2. Javascript:阻止浏览器默认右键事件,并显示定制内容
  3. node.js中exports与module.exports的区别分析
  4. 我见过的最漂亮代码---通过删除代码来实现功能的提升
  5. php mysql数据库同步_实现MySQL数据库同步实例演示_MySQL
  6. The dialect was not set. Set the property hibernate.dialect
  7. android人物移动设计软件,实现在SurfaceView上移动游戏人物
  8. 【文本摘要】BottleSum——文本摘要论文系列解读
  9. Mysql 查询列名
  10. 女儿傻 女儿悲 2014-2-23
  11. 搭建web项目常见错误
  12. 轻量级深度神经网络推理引擎——阿里巴巴的 MNN
  13. 微信公众号如何绑定运营者的微信号
  14. 合工大OJ 1359
  15. wamp3.1.4下载及WampServer下增加多版本PHP
  16. 使用极狐GitLab限制开发者使用CI/CD的权限,三种方案
  17. 关于SOTIF预期功能安全的理解
  18. mysql更改date为ym_关于日期格式设置及转换
  19. Java调用linux终端命令
  20. 为什么我们认为GPT是一个技术爆炸

热门文章

  1. 动态串行机制多元宇宙优化算法
  2. Typora 软件修改主题中的字体
  3. 单片机实例4——广告灯的左移右移(硬件电路图+汇编程序+C语言程序)
  4. fiddler 重放攻击,简单的模拟重放攻击
  5. 缘起,不算浪漫的故事
  6. swing中播放音频文件,封装成类,完美应用
  7. Android 蓝牙 IOS ANCE协议介绍 - 史上最详细
  8. C++ memset()函数用法
  9. LiveGBS国标视频平台接入4G移动执法仪如何保存设备的执法录像实时录像和云端录像
  10. EasyCVR云端录像和设备录像如何区分?哪些接入协议支持设备录像回看?