IOIO序列化
Posted sonder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOIO序列化相关的知识,希望对你有一定的参考价值。
文件:文件可认为是相关记录或放在一起的数据的集合。文件一般保存在硬盘、U盘、光盘、云盘的媒介中。
JAVA API:java.io.File类可操作文件
File对象的构建
File file=new File(String pathname); 需要注意的是:String pathname的格式为:e:\\\\test.txt或e:/test.txt
File类常用的方法:
boolean exists()【判断文件或目录是否存在】
boolean isFile()【判断是否是文件】
boolean isDirectory()【判断是否是目录】
String getPath()【返回此对象表示的文件的相对路径名】
String getAbsolutePath()【返回此对象表示的文件的相对路径名】
String getName()【返回此对象表示的文件或目录的名称】
booblean delete()【删除此对象指定的文件或目录】
booblean creatNewFile()【创建名称的空文件,不创建文件夹】
long length()【返回文件的长度,单位为字节】
创建文件的方法:
public void create(File file) { if (!file.exists()) { try { file.createNewFile(); System.out.println("文件已创建!"); } catch (IOException e) { e.printStackTrace(); } } }
删除文件的方法:
public void delete(File file) { if (file.exists()) { file.delete(); System.out.println("文件已删除!"); } }
显示文件的方法:
public void showFileInfo(File file) { if (file.exists()) { // 判断文件是否存在 if (file.isFile()) { // 如果是文件 System.out.println("名称:" + file.getName()); System.out.println("相对路径: " + file.getPath()); System.out.println("绝对路径: " + file.getAbsolutePath()); System.out.println("文件大小:" + file.length() + " 字节"); } if (file.isDirectory()) { System.out.println("此文文件是目录"); } } else System.out.println("文件不存在"); }
流
流:流是指一连串流动的字符,是以先进先出方式发送信息的通道。
常用的文件读写类
文本文件的读写
字节流方式:FileInputStream、FileOutputStream
字符流方式:BufferedReader、BufferedWriter
二进制文件的读写
DataInputStream、DataOutputStream
字节流方式读写文本
FileInputStream 读文本文件
InputStream类常用方法
int read()【从此输入流中读取一个数据字节】
int read(byte[] b)【从此输入流中将最多b.length个字节的数据读入一个byte数组中。】
int read(byte[] b,int off,int len)【从此输入流中将最多len个字节的数据读入一个byte数组中】
void close()【关闭此文件输入流并释放与此流有关的所有系统资源】
int available() 【返回下一次对此输入流调用的方法可以不受阻塞的从此输入流读取(或跳过)的估计剩余字节】
子类FileInputStream常用的构造方法
FileInputStream(File file)【通过文件对象创建FileInputStream对象】
FileInputStream(String name)【通过name文件路径创建FileInputStream对象】
FileOutputStream 写文本文件
OutputStream类常用方法
void write(int c) 【将指定字节写入此文件输出流。】
void write(byte[] buf)【将 b.length 个字节从指定 byte 数组写入此文件输出流中。】
void write(byte[] b,int off,int len) 【将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。】
void close( ) 【关闭此文件输出流并释放与此流有关的所有系统资源。】
子类FileOutputStream常用的构造方法
FileOutputStream (File file) 【创建一个向指定 File 对象表示的文件中写入数据的文件输出流。】
FileOutputStream(String name) 【创建一个向具有指定名称的文件中写入数据的输出文件流。】
FileOutputStream(String name, boolean append) 【创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。】
需要注意的是:
1、前两种构造方法在向文件写数据时将覆盖文件中原有的内容。
2、创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件。
3、FileInputStream和FileOutputStream创建的流属于节点流,直接操纵数据源。
字符流方式读写文本文件
BufferedReader读文本文件
实例:
//缓冲流的使用 public static void main(String[] args) throws Exception { //BufferedReader读取文件信息 //reader类的子类FileReader FileReader fr=new FileReader("f:/text.txt"); BufferedReader br=new BufferedReader(fr); //利用缓冲流读取信息 String line=br.readLine();//每次读一行数据 while(line!=null){ System.out.println(line); line=br.readLine(); } //关闭流 br.close(); fr.close(); }
使用字符流读取文本文件相关类
Reader
FileReader(节点流)
BufferedReader(处理流)
Reader类常用方法
int read( )
int read(char[] c)
int read(char[] c,int off,int len)
void close( )
子类BufferedReader常用的构造方法
public BufferedReader(Reader in) //in通常使用FlieReader对象
子类BufferedReader特有的方法
public String readLine() //读取一行信息
BufferedWriter写文本文件
使用字符流写文本文件相关类
Writer
FileWriter(节点流)
BufferedWriter(处理流)
Writer类常用方法
void write(String str)
void write(String str,int off,int len)
void close()
void flush()
子类BufferedWriter常用的构造方法
BufferedReader(Writer out) //in通常使用FlieWriter对象
字节流方式读写二进制文件
DataInputStream类读取二进制文件(处理流)
FileInputStream的子类
与FileInputStream类结合使用读取二进制文件
DataOutputStream类写二进制文件(处理流)
FileOutputStream的子类
与FileOutputStream类结合使用写二进制文件
序列化与反序列化的过程:
package com.zx5; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; //--------------------------------序列化的过程----------------------------------------------- public class Test { //把对象写入到磁盘文件,叫做序列化,,,,,反序列化就是把磁盘文件还原 public static void main1(String[] args) throws Exception { //集合都可以序列化 List<Object> list=new ArrayList<Object>(); list.add(10); list.add("200"); list.add(23.23); OutputStream out=new FileOutputStream("f:/text.txt"); //objectOutputStream序列化的流 ObjectOutputStream oos=new ObjectOutputStream(out); //写入对象 oos.writeObject(list); //关闭流 oos.close(); out.close(); } //----------------------------------------反序列化------------------------------ public static void main(String[] args) throws Exception { //反序列化:把二进制文件中的内容恢复成对象 //字节输入流对象 InputStream in=new FileInputStream("f:/text.txt"); //创建一个ObjectInputStream对象 ObjectInputStream ois=new ObjectInputStream(in); //读取readObject() Object obj=ois.readObject();//读出对象 List<Object> list=(List<Object>) obj; for (Object object : list) { System.out.println(object); } } }
需要注意的是:
如果不对钱进行序列化,可用transient进行修饰,如:private transient double money;
以上是关于IOIO序列化的主要内容,如果未能解决你的问题,请参考以下文章