IO流(Input/Output)

简介:

流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出。

IO技术实际上就是让数据在电脑内存或程序系统和硬件(硬盘,内存卡)之间转换的技术。

分类:

1、按流向

输入流:读取数据,把持久设备的数据读取到内存中。

输出流:写出数据,把内存的数据写出到持久设备。

2、按种类

字节流:传输过程中,传输数据的最基本单位是字节的流,常用的文件(txt、图片、mp3、mp4等)都可以用字节流来进行IO操作。

字符流:传输过程中,传输数据的最基本单位是字符的流,一般只能用于文本文件进行IO操作。

字节流转换:字节流+编码 =》字符流 ;字符流 =》字节流 + 解码 。

IO流之字符流

1、FileWriter类

常用方法:

输出流写数据步骤:

  • 指定文件位置
  • 创建输出流对象
  • 调用方法写数据
  • 将数据刷新到文件中
  • 关闭资源

代码案例:

代码:

package InputOutput;

import java.io.FileWriter;
import java.io.IOException; public class FileWriterDemo1 {
public static void main(String[] args) {
// 指定文件位置
// 两个“\\”,因为一个“\”会被编译成特殊符号,也可以只用一个“/”
// 文档不存在系统会创建文件,但文件夹缺少会报错!
// String path = "E:\\JavaCodeDemo\\InputOutput\\filewriter\\demo1.txt";
String path = "E:/JavaCodeDemo/InputOutput/filewriter/demo1.txt";
// 相对路径会根据当前项目的位置创建文档
// String path = "demo1.txt"; // 不带文件后缀也会创建成功,但本质还是字符流
// String path = "demo"; try {
// FileWriter类(字符流输出)
FileWriter writer = new FileWriter(path);
// 也可以直接写成 : FileWriter writer = new FileWriter("E:/JavaCodeDemo/InputOutput/filewriter/demo1.txt"); // 获取此流使用的字符编码的名称
String name = writer.getEncoding();
System.out.println("编码名称 :"+name);
/*
* 创建输出流对象做了哪些事情: A:调用系统资源创建了一个文件 B:创建输出流对象 C:把输出流对象指向文件
*/
// 调用输出流对象的写数据的方法
// 写一个字符串数据
writer.write("helloworld!"); // 写一个字符串中的一部分数据
// 结果:hel (0:起始下标;3:长度)
// writer.write("helloworld", 0, 3); // 写一个字符数组数据
// 結果:A0中(如果打开有乱码应该是文档和编译器的编码不同,设置一下编码格式即可)
// char[] demo = { 'A', '0', '中' };
// writer.write(demo); // 写一个字符数组的一部分数据
// 結果:A (0:起始下标;1:长度)
// char[] demo = { 'A', '0', '中' };
// writer.write(demo, 0, 1); // 调用flush,将内容写道文档中
writer.flush();
// 释放资源
writer.close();
// 流程没问题输出“Success”
System.out.println("Success");
} catch (IOException e) {
e.printStackTrace();
// 流程出错输出“failed”
System.out.println("failed");
}
// close()和flush()方法的区别:
// flush():刷新缓冲区。流对象还可以继续使用。
// close():先刷新缓冲区調用flush,然后通知系统释放资源。流对象不可以再被使用了。
}
}

结果:

上面只是简单的写入数据,每次都会把数据删除再重新写入,下面尝试一下不删除原有数据,而是直接在文本内追加数据:

代码:

package InputOutput;

import java.io.FileWriter;
import java.io.IOException; public class FileWriterDemo2 {
public static void main(String[] args) {
// 换行写入字符
// 不同的操作系统换行符是不一样的,常见系统换行符如下所示:
// windows:\r\n
// linux:\n
// mac:\r
String path = "E:\\JavaCodeDemo\\InputOutput\\filewriter\\demo2.txt";
try {
// true表示追加写入,默认是false
FileWriter writer = new FileWriter(path, true);
for (int i = 0; i < 2; i++) {
writer.write("测试 :" + i + "\r\n");
writer.flush();
}
writer.close();
// 流程没问题输出“Success”
System.out.println("Success");
} catch (IOException e) {
e.printStackTrace();
// 流程出错输出“failed”
System.out.println("failed");
} }
}

结果:

2、FileReader类

常用方法:

输入流读数据步骤:

  • 指定文件位置
  • 创建输入流对象
  • 调用方法读数据
  • 关闭资源

代码案例:

文档内容:

代码:

package InputOutput;

import java.io.FileReader;
import java.io.IOException; public class FileReaderDemo1 {
public static void main(String[] args) throws IOException {
// 读取文件位置
// 文件路径需要准确不然报错
String path = "E:\\JavaCodeDemo\\InputOutput\\filewriter\\demo3.txt";
// 创建FileReader类(字符输入流)
FileReader reader = new FileReader(path);
// int result1 = reader.read();
// System.out.println(result1);//49
// result1 = reader.read();
// System.out.println(result1);//50
// result1 = reader.read();
// System.out.println(result1);//51
// result1 = reader.read();
// System.out.println(result1);//52
// result1 = reader.read();
// System.out.println(result1);//53
// result1 = reader.read();
// System.out.println(result1);//54
// 读取完以后读取到“-1”
// result1 = reader.read();
// System.out.println(result1);//-1
//读取方法优化
int flag = 0;
while ((flag = reader.read()) != -1) {
System.out.println(flag);
}
reader.close();
// 流程成功输出Success
System.out.println("Success");
}
}

此处会把文档中的“123456”转化为字符‘1’、‘2’、‘3’、‘4’、‘5’、‘6’,所以输出结果是字符‘1’、‘2’、‘3’、‘4’、‘5’、‘6’根据ASCII码转换后的十进制数字。

最新文章

  1. Spring Security控制权限
  2. 跳转页面,传递参数——android
  3. ios 转发一篇对于6 plus的分辨率模式的说明
  4. 使用MVC和EF,在保存数据的时候报错:System.Data.Entity.Validation.DbEntityValidationException: 对一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性。
  5. 查看MYSQL数据库中所有用户及拥有权限
  6. MySQL基础学习之触发器
  7. NET Portability Analyzer
  8. JS关闭窗口或JS关闭页面的几种代码
  9. windows系统中的dll的作用详细解释
  10. TP5.0 PHPExcel 数据表格导出(原)
  11. MySQL(二)MySQL的安装和简单使用
  12. MySQL 查询重复数据,删除重复数据保留id最小的一条作为唯一数据
  13. IDEA使用Maven搭建SSM框架
  14. 【python】self &amp; cls
  15. jQuery开发技巧
  16. Python魔法方法之属性访问 ( __getattr__, __getattribute__, __setattr__, __delattr__ )
  17. Jenkins插件开发(四)-- 插件发布
  18. BETA阶段冲刺集合
  19. Python程序员鲜为人知但你应该知道的16个问题(转)
  20. 知也atitit.解决struts2&#160;SpringObjectFactory.getClassInstance&#160;NullPointerException&#160;&#160;v2&#160;q31无涯&#160;-&#160;I

热门文章

  1. 【算法】混合流体模拟demo
  2. Chrome恢复显示网址 https:// 和 www
  3. Request库的安装与使用
  4. 《Head first设计模式》之命令模式
  5. 解决pycharm打开html页面一直刷新
  6. python 解压、复制、删除 文件
  7. 彻底理解Windows认证1
  8. 一个最简单的Dockfile实践
  9. 处理方法返回ModelAndView类型
  10. Java 8 函数式编程