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. Go语言实现:【剑指offer】对称的二叉树

    该题目来源于牛客网<剑指offer>专题. 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. Go语言实现: 方法一:递归 / ...

  2. 17-SSM中通过pagehelper分页的实现

    SSM中通过pagehelper分页的实现 1. 在SSM框架的基础上实现,导包 <!-- 分页 --> <dependency> <groupId>com.git ...

  3. 【WPF学习】第四十七章 WriteableBitmap类

    WPF允许使用Image元素显示位图.然而,按这种方法显示图片的方法完全是单向的.应用程序使用现成的位图,读取问题,并在窗口中显示位图.就其本身而言,Image元素没有提供创建和编辑位图信息的方法. ...

  4. VFP调用API来控制USB摄像头,实现拍照或录像

    *--前提:VFP7.0以上;Windows 2K及以上*--控件:AVICAP32.DLL *--定义:一般放到主程序或表单(集)的Load事件中Public WM_CAP_DRIVER_DISCO ...

  5. 底层解析web安全软件

    试用了一些 web安全软件,服务器安全狗.云锁.绿盟……  感觉里面有些功能是可以手动优化的,大概总结一下. 1.禁止 ping                  这是服务器比较常用的功能,防止pin ...

  6. 数组和CLR-非常特殊的关系

    目录 数组和CLR-非常特殊的关系 公共语言运行时(CLR)的基础 内存和类型安全 实现细节 特殊帮助器类 移除边界检查 分配数组 运行时以不同的方式对待数组 进一步阅读 数组源码引用 参考文档 数组 ...

  7. implements Serializable有什么作用?

    没有implements Serializable,你就不能通过rmi(包括ejb)提供远程调用.serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序 ...

  8. redis_入门

    Redis_day01 1. NoSql 1.1 NoSql是什么 NoSQL(不仅仅是SQL not only SQL),泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在处 ...

  9. 在window上安装mysql - MySQL5.7.24 版本

    1.下载安装包 下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 点击Download,选择 No thanks, just ...

  10. win7无法访问局域网中其它计算机:0x80070035

    https://zhidao.baidu.com/question/304232217962584564.html https://jingyan.baidu.com/article/ff411625 ...