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年,手把手教你如何在CentOS7上一步一步搭建LDAP服务器的最新教程

    同步滚动:关 什么是LDAP 什么是LDAP? 要想知道一个概念,最简单的办法就是wikipedia,当然也可以百科. LDAP全称是轻型目录访问协议(Lightweight Directory Ac ...

  2. MySQL中大数据表增加字段,增加索引实现

    MySQL中大数据表增加字段,通过增加索引实现 普通的添加字段sql ALTER TABLE `table_name` ADD COLUMN `num` int(10) NOT NULL DEFAUL ...

  3. Basic Auth攻击

    1.Basic Auth认证简介 Basic身份认证,是HTTP 1.0中引入的认证方案之一.虽然方案比较古老,同时存在安全缺陷,但由于实现简单,至今仍有不少网站在使用它. 例如Apche Tomca ...

  4. HttpMessageNotReadableException

    HttpMessageNotReadableException 情况描述: spring boot web项目,尝试使用热部署工具. Controller只写了用来测试异常的方法, 异常处理器去捕获异 ...

  5. Head First设计模式——代理模式

    在HeadFirst设计模式中代理模式用了比较多的篇幅来讲解,其中的例子我感觉有些繁琐,所以我们这篇就不按照惯例用例子来阐述代理模式了.我们直接进入正题,分析模式本身的设计和解决的问题. 远程代理模式 ...

  6. js+vue、纯js 按条件分页

    听说大牛都从博客开始的... 人狠话不多,翠花上酸菜代码: 有注解基本上都看的懂!但是自己还是要注意以下几点,免得以后再浪费时间. #.vue 中监听事件 v-on:change=“vueChange ...

  7. Redis实现访问控制频率

    为什么限制访问频率 做服务接口时通常需要用到请求频率限制 Rate limiting,例如限制一个用户1分钟内最多可以范围100次 主要用来保证服务性能和保护数据安全 因为如果不进行限制,服务调用者可 ...

  8. PMP--0. 前言(闲言)

    先说一句话给未来的自己:你一定会感谢你现在的努力,当你回看时,记得带着现在的心境和心愿.未来更好的明天. --2019.12.1禾木留 今天是正式发布的时间--2020.01.01,听着新年快乐的祝福 ...

  9. nodejs爬虫--抓取CSDN某用户全部文章

    最近正在学习node.js,就像搞一些东西来玩玩,于是这个简单的爬虫就诞生了. 准备工作 node.js爬虫肯定要先安装node.js环境 创建一个文件夹 在该文件夹打开命令行,执行npm init初 ...

  10. [.NET][C#] C#中的时间戳

    Unix时间戳(Unix timestamp),或称Unix时间(Unix time).POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年1月1日0时0分0秒( ...