IO流(二)转换流、序列化、commons-IO框架
转换流
介于字符流和字节流之间的流
字节流与字节流相互转换
OutputStreamWriter
输出流,按照指定的字符集编码,把字符流转化成字节数据
编码:把字符数据转换成字节数据;
解码:把字节数据转换成字符数据 二进制数据—>字符数据
- 构造方法:
- OutputStreamWriter(OutputStream out) 创建使用默认字符(计算机系统的编码)编码的 OutputStreamWriter。
- OutputStreamWriter(OutputStream out, String charsetName) 创建使用指定字符集的 OutputStreamWriter
- 方法
- void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,到文件中
- void write(int c) 写入单个字符,到文件中
- void write(String str, int off, int len) 写入字符串的某一部分,到文件中
InputStreamReader
输入流,将字节数据转换成字符数据
- 构造方法
方法
public class Demo {public static void main(String[] args) throws Exception {method("UTF-8"); }public static void method(String encoding) throws UnsupportedEncodingException, FileNotFoundException, IOException {InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"),encoding);char [] cArray=new char[1024];int len = isr.read(cArray);System.out.println(new String(cArray, 0,len));isr.close(); }private static void method02() throws UnsupportedEncodingException, FileNotFoundException, IOException {OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("b.txt"),"UTF-8");osw.write("中国");System.out.println("写入成功");osw.close(); }private static void method01() throws FileNotFoundException, IOException {OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("a.txt"));osw.write("你好");System.out.println("写入成功");osw.close(); }
}
序列化和反序列化
序列化(ObjectOutputStream):把java对象对应的二进制数据存储到文件中
反序列化(ObjectInputStream):把文件找中的对象二进制数据转成对象
反序列化出现类型无效异常怎么解决
Exception in thread “main” **java.io.InvalidClassException.**com.day12.text.Student; local class incompatible: stream classdesc serialVersionUID = 5347324120869492511, local class serialVersionUID = 6670513660087444604
原因:当初序列化时,使用类与现在反序列化的使用到的类不是同一个版本
解决方法:保证序列化用到的类与现在反序列化用到的这个类是同一个版本
利用版本号进行标记
private static final long serialVersionUID = 6670513660087444604L;
相同版本号的才可以进行反序列化
瞬态关键字transient
被标记的属性会被隐藏,不会被保存到文件中
怎么写入和读取多个对象
写入对象需要注意的是:每次更改了对象的属性或者方法时,都要重新写入到文件,不然会报出版本不匹配的异常。
读取对象:在读取对象时,不能像读取文件那样全部能读出来。读取只能读取对象文件首个元素。为了能读取多个元素可以使用数组或者集合来存放对象,将数组或者对象写入到文件中。然后在读取出来。
向文件中写入对象代码
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;public class DemoObjectOutputStream {public static void main(String[] args) throws Exception {//创建对象输出流ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("student1.txt"));//创建集合存放学生对象ArrayList<Student>list=new ArrayList<Student>();//创建对象数组 将对象添加到集合
// Student[] stu=new Student[3];
// stu[0]=new Student("小白",87);
// stu[1]=new Student("呵呵",67);
// stu[2]=new Student("好好",77);Student stu=new Student("好好",77);Student stu1=new Student("好好1",77);list.add(stu);list.add(stu1);//遍历集合将集合的内容添加到文件中/* for(int i=0;i<list.size();i++){Student student = list.get(i);oos.writeObject(student);}*///oos.writeObject(stu);oos.writeObject(list);System.out.println("写入成功");oos.close();}
}
读取对象到控制台(内存)
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.ObjectInputStream;
import java.util.ArrayList;public class DemoObjectInputStream {public static void main(String[] args) throws Exception {//创建对象输出流ObjectInputStream ois=new ObjectInputStream(new FileInputStream("student1.txt"));//Student []stu=(Student[])ois.readObject();ArrayList<Student> list = (ArrayList<Student>) ois.readObject();System.out.println(list.get(0).getName());ois.close();}}
学生对象代码
import java.io.Serializable;public class Student implements Serializable{private String name;private int grade;public Student(String name, int grade) {super();this.name = name;this.grade = grade;}@Overridepublic String toString() {return "Student [name=" + name + ", grade=" + grade + "]";}public Student() {super();// TODO Auto-generated constructor stub}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getGrade() {return grade;}public void setGrade(int grade) {this.grade = grade;}
}
commons-IO 框架
第三方框架这里有操作文件的工具类。
相关文章:

Http之Get/Post请求区别
今天在网上看了一些关于http 协议中get 和Post的文章。在此做一个总结,当是做一个笔记吧。 一、什么是HTTP-GET和HTTP-POST HTTP-GET和HTTP-POST是使用HTTP的标准协议动词,用于编码和传送变量名/变量值对参数,并且使用相关的请求语义。每个HT…

[vb+mo] visual baisc 6.0 基于mapobjects 2.4 开发的数字化校园电子地图
程序的源代码下载地址: https://docs.google.com/ 请安装VB6.0企业版(不是企业版运行会报错,因为缺少相应的控件)和ESRI MO2.4 程序的质量一般,因为时间仓促,主要是毕业设计时间仓促.希望大家多多改进.有什么问题可以发邮件欢迎交流. 程序的主窗口代码: 通用变量定义Private l…

vsftp部署
1.安装该软件需要使用最高用户(root)进行安装,否则不能进行。 2.首先用命令检查VSFTP是否已经安装。chkconfig --list | grep vsftpd 3.安装vsftp。yum install –y vsftpd 4.启动vsftp。service vsftpd start 5.添加一个ftp用户。useradd f…

线程、线程匿名内部类、解决线程不安全的方式
线程 线程:正在运行的程序,是程序的执行路径;多线性 进程:是应用程序的载体,程序运行在虚拟机中。一个应用软件对应一个进程。 一个进程包含多个线程,一个线程对应一个进程。 好处:提高软件的运…

工作流编程循序渐进(9:使用本地服务在宿主和工作流之间通信)
工作流编程循序渐进(9:使用本地服务在宿主和工作流之间通信) 作者 朱先忠 [摘要]在本篇中,首先详细分析本地服务有关概念,探讨本地服务在工作流运行时、工作流实例及工作流宿主间的地位及作用…

使用Properties连接数据库
使用Properties连接数据库 要注意的是: 1.通过配置文件来连接数据库时,连接信息要以 mysql.XXX开头,否则会提示异常。 java.sql.SQLException: Access denied for user localhost (using password: YES)生成配置文件的实现代码 1、创建写入配置信息工…
两边横线,中间标题
<!DOCTYPE html> <html> <head> <title>两边横线,中间标题</title> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <style type"text/css"> <!--ul { mar…

交换机基础配置
请同学们下载附件中的实验并完成。转载于:https://blog.51cto.com/coffee0546/204093

python高级-模块(14)
一、python中的模块 有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt函数,必须用语句#include <math.h>引入math.h这个头文件,否则是无法正常进行调用的。 那么在Python中,如果要引用一些其他的函数,该怎么处理呢&am…

RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列
上一篇已经讲了Rabbitmq如何在Windows平台安装,不懂请移步:RabbitMQ学习系列一:windows下安装RabbitMQ服务 一、理论: .net环境下,C#代码调用RabbitMQ消息队列,本文用easynetq开源的.net Rabbitmq api来实…

一步步学会使用ASP.NET 4 WEB应用程序中使用URL Routing(翻译)
创建路由 路由就是将URL路径映射到具体的物理文件。若要将路由添加到网站中,请使用 RouteCollection.MapPageRoute 方法将它们添加到RouteTable类的静态Routes属性。 将用于添加路由的方法添加到 Global.asax 文件中 如果网站还没有 Global.asax 文件,…

Properties持久的属性集
Properties 属性集合继承了Hashtable 属性包括属性名和属性值(键值对keyvalue) 作用 可以存储多个键值,与map相似可以把键值对存储到文件中可以把文件中的键值对读取到Properties对象中 构造方法: Properties() 创建一个无默认…

让你二十年后仍是人才
1.不管坐什么位置,都要保持学习的习惯出社会工作十年到十五年左右,会有一种「上下卡住」的闭塞感与无力感。因为,这个阶段的上班族虽然拥有一定的资历与经验,工作也得心应手,但上面有比自己更资深的前辈压着࿰…

Django ORM操作
Django ORM操作 一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果<2> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选…

ChineseCalendar类[转]
///<summary>///Title: ChineseCalendar类 ///Description: 中文日期工具类 ///author 万灵杰[作者] ///version 1.0.0.0 ///date 2009年7月30日 ///modify ///date ///</summary>publicclassChineseCalendar { privatestaticrea…

程序员的自我救赎---13.1:职场招聘与面试心得
《前言》 《目录》 (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心 (五)钱包系统 (六)GPU支付中心 &…

网络编程 UDP通信的过程 TCP通信过程 多线程文件上传
网络概述 协议 在网络之间传出数据时需要按照指定的标准来传输,标准中规定了数据的格式、大小、传输的方式、传输速率。形成统一规范—>按照规范开发的代码—>协议(应用层、传输层、网络层、链路层) InetAddress类 用来分装网络地址…

set debug mode for flex builder
1. 要具备debug功能,我们必须要首先安装Flash Player Debug 版本。windows版本2. 安装好debug版本后,我们还需要添加日志的配置文件mm.cfg。该配置文件存放的目录如下:Macintosh OS X MacH D:Library:Application Support:macromedia:mm.cfgM…

XML 解析XML文档 XML约束
XML 什么是XML Extensible Markup Language(可扩展的标记语言)他是一个语言,有自己的语法,和Java以及其他的编程无关“标记” 在文件中包含类似于张三 ,这种用尖括号括起来的叫标记,使用来标记数据的。标…

Host Only、NAT和Bridge三种网络连接
Host Only、NAT和Bridge三种网络连接 在安装好了Linux镜像之后,如何连接物理机和虚拟机呢?这就需要网络连接,网络连接有三种:HostOnly、NAT、Bridge,它们都可用于Guest虚拟机和Host物理机之间的网络通信。 一、三者的不…

OSPF 提升 一 ----基础
ospf ccnp内容 一 link-state protocols IGP 开放式的最短路径优先协议 公有协议支持中到大型的网络 spf算法 链路状态协议1.传送的LSA link status advertisement 链路状态通告 包换拓扑信息具体包括:网段的前缀 掩码 连接的路由器的…

C#实现网页截图功能
//需要添加System.Drawing及System.Windows.Forms引用 using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Windows.Forms; namespace 网页截图 { class Program { [S…

微软发布全新多核心操作系统原型:Barrelfish
Windows 7完成之后,很多人开始把目光投向微软的下一代服务器和客户端操作系统Windows 8,不过今天微软放出了一套全新操作系统的原型,开发代号“Barrelfish”。该系统由微软剑桥研究院和苏黎世理工学院联合全新开发,专为现在和未来…

Docker应用:Kubernetes(容器集群)
Docker应用:Kubernetes(容器集群) 原文:Docker应用:Kubernetes(容器集群)阅读目录: Docker应用:Hello WorldDocker应用:Docker-compose(容器编排)…
通道应用——抠头发
通道应用——抠头发 原图: 效果图: 步骤:1、打开原图的“通道面板”,选择颜色对比分明的绿色通道,并新建一个绿色通道副本;2、选择“图像”-“调整”-“色阶”,调节色阶使得头发颜色更分明些&am…

2017 ACM/ICPC 南宁赛区小结 By JSB @ Reconquista
Statistics TYPE: Onsite ContestNAME: 2017 - ICPC - Asia NanningPLAT: pc^2TIME: 2017/11/26 09:00-14:00LOCA: Guangxi UniversityTEAM: Reconquista[shb,lsmll,jsb]RANK: 8/227 3.52%SOLVE: 8/13PENALTY: 451 ◦ A - 1 ◦ E - 123 (2) ◦ F - 8 ◦ H - 55 ◦ I - 97 (1) ◦…

用户管理系统控制台版连接数据库
建User表 CREATE TABLE user (id INT(11) NOT NULL AUTO_INCREMENT,name VARCHAR(20) DEFAULT NULL,pwd VARCHAR(20) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEINNODB AUTO_INCREMENT5 DEFAULT CHARSETutf8User对象(javaBean) public class User {priva…

微信小程序组件 日历
js文件 use strict;let choose_year null,choose_month null;const conf {data: {hasEmptyGrid: false,showPicker: false},onLoad() {const date new Date();const cur_year date.getFullYear();const cur_month date.getMonth() 1;const weeks_ch [ 日, 一, 二, 三, …

node编写定时任务,for循环只执行一遍的解决办法
在用node编写定时任务时候,发现for循环只执行i0这一次,就不接着循环执行了,下面贴上代码: exports.task async function(ctx){ let { app } ctx, resultArr1 [],//查询的数据库数据 resultArr2 [];//查询的数据库…

oledb读不到dbf文件内容
最近在处理一批VFP的数据库,使用OleDB方式读取一直很正常,前两天突然碰到一张表怎么也读不出数据来,害我瞎忙了一整天,在研究了DBF文件结构后发现记录前的0x20位置存储的是0x2A。 一查才知道是删除标记,我倒࿰…