java Io流的应用
标准输入输出流
1.1标准输入流
源数据源是标准输入设备(键盘、鼠标、触摸屏)等输入设备。在java中用System.in 得到一个InputStream字节输入流。
[1]在控制台输入一句话,然后原样输出
package Io2; import java.io.IOException;
import java.io.InputStream; public class Test01 {
public static void main(String[] args) throws IOException {
//system.in是字节输入流InputStream
InputStream in=System.in;
//一次性读取的字节数和长度
byte[] buf=new byte[1024];
int len;
len=in.read(buf);
String str=new String(buf, 0, len);
System.out.println(str);
}
}
nihao
nihao
标准输入流以字节流流入内存,如果在控制台中输入字符,字符以默认编码(win简体:gbk)编码成字节进入标准输入流。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; //需求:从控制台高效读取一行数据。把一首诗写入文件。
public class Test02 {
public static void main(String[] args) throws IOException {
// [1] system.in是控制台字节输入流InputStream
InputStream in = System.in;
// 【3】 输入的是字节流,通过字节转换器转换成字符流 读取到cpu
InputStreamReader reader = new InputStreamReader(in, "GBK");
// [2] 编写快速字节读取管道,实现读的对象 字节-------字符
BufferedReader br = new BufferedReader(reader); // 【4】 创建file文件
File file = new File("D:\\javatest\\l.txt");
// 【6】 cpu的是字符流,写入文件中需要转换成字节流 需要一次性写入多个,FileWriter
FileWriter writer = new FileWriter(file);
// OutputStreamWriter writer=new OutputStreamWriter(out, "GBK")
// 【5】 编写快速字节写入管道,字符-----字节
BufferedWriter bw = new BufferedWriter(writer);
String end = "bye";
while (true) {
String line = br.readLine();
if (line.equals(end)) {
break;
} bw.write(line);
bw.newLine();
}
bw.flush();
bw.close();
writer.close();
}
}
1.2 标准输出流(PrintStream)
数据目的地是标准输出设备(显示器)等输出设备。在java中用System.out得到一个PrintStream 字节输出流(字节打印流)。提供了更强大的
println
打印方法用于打印各种数据类型。
需求:读取文件,显示到标准输出设备
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream; public class Test04 {
public static void main(String[] args) throws IOException {
File file = new File("d:\\javatest\\k.txt");
FileReader reader = new FileReader(file);
BufferedReader br = new BufferedReader(reader);
//PrintStream 字节输出流(字节打印流)
PrintStream ps = System.out;
String line;
while ((line = br.readLine()) != null) {
ps.println(line);
}
}
}
1.3 Scanner
通过scanner扫描文件、字节流等
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
// 扫描平台默认编码的文件
public class Test03 {
public static void main(String[] args) throws IOException {
File file = new File("d:\\javatest\\k.txt");
Scanner sc = new Scanner(file);
String line;
while (sc.hasNextLine()) {
line = sc.nextLine();
System.out.println(line);
} }
}
1.4 序列化
把内存中的对象永久保存到硬盘的过程称为对象序列化,也叫做持久化。
把硬盘持久化的内存恢复的内存的过程称为对象反序列化。
类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化,并抛出异常
Serializable接口没有方法或字段,仅用于标识可序列化的语义
public class Student implements Serializable{
// 。。。
1.5 序列化对象
ObjectOutputStream 继承于OutputStream,专门用于把对象序列化到本地。提供了
writeXXX
writeObject() 用于写入一个对象
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream; public class Test05 {
public static void main(String[] args) throws IOException {
Student stu=new Student("001", "张三", 20, Gender.男);
File file =new File("D:\\javatest\\m.txt");
FileOutputStream out=new FileOutputStream(file);
ObjectOutputStream oos=new ObjectOutputStream(out);
oos.writeObject(stu);
oos.close();
out.close();
System.out.println("格式化完成");
}
}
ObjectInputStream 继承于InputStream ,专门用于把本地持久化内容反序列化到内存,提供了
readXXX
readObject() 用于读取一个序列化内容并返回一个对象。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream; public class Test06 {
public static void main(String[] args) throws IOException,
ClassNotFoundException {
File file = new File("D:\\javatest\\m.txt");
FileInputStream in = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(in);
// readObject() 用于读取一个序列化内容并返回一个对象。
Student stu = (Student) ois.readObject();
System.out.println(stu.getId());
System.out.println(stu.getName());
System.out.println(stu.getAge());
System.out.println(stu.getGender());
ois.close();
in.close();
}
}
001
张三
20
男
1.5 序列化版本
当序列化完成后,后期升级程序中的类(Student),此时再反序列化时会出现异常。
异常原因:序列化流的serialVersionUID和升级后类的版本不匹配。
解决方案:给Student类加序列化版本号,有两种方式
default serial version ID 生成默认的serial version ID 一般值都是1L。
generated serial version ID 根据当前类的属性、方法生成一个唯一ID。
public class Student implements Serializable {
private static final long serialVersionUID = -6876240585925178921L;
transient
开发过程中,如果想忽略某些字段不让其序列化时,可以使用transient修饰。
public class Student implements Serializable {
private static final long serialVersionUID = -6876240585925178921L;
private String id;
//忽略某些字段不让其序列化时,可以使用transient修饰
private transient String name;
private transient int age;
1.6 DataInputStream/DataOutputStream
DataOutputStream 继承OutputStream,专门用于把基本java数据类型写入输出流。提供了writeXXX 写入基本java数据类型。
DataInputStream 继承于InputStream,允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。
DataInputStream/DataOutputStream 特别适合读取/写入在网络传输过程中的数据流。
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; public class Test07 {
public static void main(String[] args) throws IOException {
File file = new File("D:\\javatest\\n.txt");
FileOutputStream out=new FileOutputStream(file);
DataOutputStream dos=new DataOutputStream(out);
dos.writeInt(10);
dos.writeUTF("hellow中国");
dos.close();
out.close();
System.out.println("ok");
}
}
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; public class Test08 {
public static void main(String[] args) throws IOException {
File file = new File("D:\\javatest\\n.txt");
FileInputStream in=new FileInputStream(file);
DataInputStream dis=new DataInputStream(in);
int a=dis.readInt();
String string=dis.readUTF();
System.out.println(a);
System.out.println(string);
}
}
注意:
以什么顺序写入基本java数据类型,就以什么顺序读取基本java数据类型。
写入基本java数据类型
java Io流的应用的更多相关文章
- Java:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
- java IO流详解
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- Java IO流学习总结
Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- 揭开Java IO流中的flush()的神秘面纱
大家在使用Java IO流中OutputStream.PrintWriter --时,会经常用到它的flush()方法. 与在网络硬件中缓存一样,流还可以在软件中得到缓存,即直接在Java代码中缓存. ...
- java io流 对文件夹的操作
java io流 对文件夹的操作 检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文 ...
- Java IO流题库
一. 填空题 Java IO流可以分为 节点流 和处理流两大类,其中前者处于IO操作的第一线,所有操作必须通过他们进行. 输入流的唯一目的是提供通往数据的通道,程序可以通过这个通道读取数 ...
- Java IO流总结
Java IO流分类以及主要使用方式如下: IO流 |--字节流 |--字节输入流 InputStream: int read();//一次读取一个字节 int read(byte[] bys);// ...
- java io流 运行错误时,保存异常到文件里面
java io流 运行错误时,保存异常到文件里面 下面这个实例,运行后,输入数字,为正确,如果输入字符串,则报错,保存错误信息 //运行错误时,保存异常到文件里面 //下面这个实例,运行后,输入数字, ...
- java io流 创建文件、写入数据、设置输出位置
java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; ...
- java io流 数据流传输
java io流 数据流传输 把这段当公式用就可以了 //数据流传输 import java.io.*; public class Index{ public static void main(Str ...
随机推荐
- 【JZOJ2758】【SDOI2012】走迷宫(labyrinth)
╰( ̄▽ ̄)╭ Morenan 被困在了一个迷宫里. 迷宫可以视为 N 个点 M 条边的有向图,其中 Morena n处于起点 S , 迷宫的终点设为 T . 可惜的是 , Morenan 非常的脑小 ...
- 【转载】Jmeter之Bean shell使用(二)
Jmeter之Bean shell使用(二) 原博文地址为:https://www.cnblogs.com/puresoul/p/4949889.html 其中需要注意的是——三.自定义函数中Bean ...
- Leetcode812.Largest Triangle Area最大三角形面积
给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积. 示例: 输入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]] 输出: 2 解释: 这 ...
- <> 是不等号的意思
<> 是不等号的意思,也有的语言可以写作:# 或者 != 1.=表示 等于: 2.<> 表示不等于:(注释:在 SQL 的一些版本中,该操作符可被写成 !=): 3.> ...
- UVA_489:Hangman Judge
Language:C++ 4.8.2 #include<stdio.h> #include<string.h> int main(void) { ]; ]; ]; ]; // ...
- bzoj1614 架设电话线
Description Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N ...
- HTTP请求模型
HTTP请求模型 HTTP请求模型 一.连接至Web服务器一个客户端应用(如Web浏览器)打开到Web服务器的HTTP端口的一个套接字(缺省为80). 例如:http://www.myweb.com: ...
- CAD专用卸载修复工具,一键完全彻底卸载删除CAD软件的专用卸载工具
Autodesk CAD卸载工具(AUTO Uninstaller)是专门为了针对Autodesk CAD软件卸载不干净而导致CAD安装失败问题进行研发的Autodesk CAD一键卸载工具.现在虽然 ...
- Django框架form表单配合ajax注册
总结一下,其实form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 保留上次输入内容 下面是写的登录页面的实例 1:views视图中的代码 # 注册页面 def regi ...
- Spring Data JPA 查询结果返回至自定义实体
本人在实际工作中使用Spring Data Jpa框架时,一般查询结果只返回对应的Entity实体.但有时根据实际业务,需要进行一些较复杂的查询,比较棘手.虽然在框架上我们可以使用@Query注解执行 ...