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码转换后的十进制数字。

IO流学习之字符流(一)的更多相关文章

  1. IO流学习之字符流(三)

    IO流之字符流缓冲区: 概念: 流中的缓冲区:是先把程序需要操作的数据保存在内存中,然后我们的程序读写数据的时候,不直接和持久设备之间交互,而改成和内存中的数据进行交互. 缓冲区:它就是临时存储数据, ...

  2. IO流学习之字符流(二)

    用字符流完成文档的复制: 测试文档: 代码1: package InputOutput; import java.io.FileReader; import java.io.FileWriter; i ...

  3. IO(二)----字符流

    计算机并不区分二进制文件与文本文件.所有的文件都是以二进制形式来存储的,因此,从本质上说,所有的文件都是二进制文件.所以字符流是建立在字节流之上的,它能够提供字符层次的编码和解码. 常见的码表 ASC ...

  4. javaio学习笔记-字符流类(1)

    1.java.io包中的字符流类-BufferedReader和BufferedWriter: BufferedReader:缓存的输入字符流; BufferedWriter:缓存的输出字符流; In ...

  5. javaio学习笔记-字符流类(2)

    1.java.io包中的字符流类-FileReader和FileWriter: BufferedReader:缓存的输入字符流; BufferedWriter:缓存的输出字符流; FileReader ...

  6. java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝

    接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...

  7. java学习之字符流与字节流的转换

    package com.io; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExce ...

  8. Java IO 转换流 字节转字符流

    Java IO 转换流 字节转字符流 @author ixenos 字节流 输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| Fil ...

  9. Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律

    第一讲     IO概述 概述 1.IO流:即InputOutput的缩写. 2.特点: 1)IO流用来处理设备间的数据传输. 2)Java对数据的操作是通过流的方式. 3)Java用于操作流的对象都 ...

随机推荐

  1. 2020.2.22 bzoj5336 party

    #include<iostream> #include<cstdio> #include<cstring> #include<cctype> #incl ...

  2. JS循环解决任意日期间的间隔天数

    用JS循环解决任意日期间的间隔天数,并求截止日期是周几 y1=1900 m1=1 d1=1 y2=2000 m2=5 d2=3 days=0 ydays=0 mdays=0 ddays=d2-d1 f ...

  3. go每日新闻--2020-02-27

    go 语言中文网(每日资讯)_2020-02-27 一.Go 语言中文网 如何正确看待 Google 宣布 Fuchsia 操作系统没有选 Go 作为终端开发语言 Actor 还是 CSP?Go 中的 ...

  4. Task.Run()方法总结

    一.从异步方法的声明说起 无返回值的类型异步方法 (1)public async Task MethodName() 带返回值类型的异步方法 (2)public async Task<TResu ...

  5. 将jsp页面转化为图片或pdf升级版(二)(qq:1324981084)

    java高级架构师全套vip教学视频,需要的加我qq1324981084 上面我们已经将jsp页面转化成html页面了,那么接下来我们的目标是利用这个html页面形成pdf或图片格式.这里我用到的是w ...

  6. StarUML之七、StarUML的Class Diagram(类图)示例

    UML 类图中的概念 类图关系:泛化(继承).实现.聚合.组合.关联.依赖 类图的详解可在网上查询(推荐https://zhuanlan.zhihu.com/p/24576502) 它描述了在一个系统 ...

  7. smartforms设置表格脚标在最后一页显示

    用户打印采购订单时,末尾计算一个合计金额,但是有多页时,合计显示在了每一页,现在希望合计项只显示在表格最后一行就可以. smartforms调整表格,将总计放在脚标内,设置脚标输出打印[在表结束处]即 ...

  8. .NET CORE(C#) WPF 值得推荐的动画菜单设计

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. .NET CORE(C#) WPF 值得推荐的动画菜单设计 阅读导航 本文背景 代码实现 本文 ...

  9. java面向对象入门(1)-入门介绍

    在本 Java OOPs 概念教程中,我们将学习四种主要的面向对象原则 -- 抽象.封装.继承和多态性.它们也被称为面向对象编程范式的四大支柱. _抽象_是在不考虑无关细节的情况下公开实体基本细节的过 ...

  10. spring cloud微服务快速教程之(十) gateway 服务网关

    0.前言 gateway是spring的二代网关, 作为Netflix Zuul的替代者,是异步非阻塞网关 ,ZUUL2也是异步非阻塞的,但未纳入spring cloud整合计划 基于WebFlux  ...