IO、IO序列化

文件:文件可认为是相关记录或放在一起的数据的集合。文件一般保存在硬盘、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;

 

转载于:https://www.cnblogs.com/sonder/p/8762099.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的IO序列化是指将一个Java对象转换为字节流以便存储或传输,也可以将字节流转换回Java对象。序列化可以用于网络通信,分布式系统、数据库存储等场景。 Java中的序列化是通过实现Serializable接口来实现的,在这个接口中没有定义任何方法,仅仅起到了一个标识作用。实现了Serializable接口的对象可以被序列化为字节流,然后再通过反序列化操作将其转换回对象。 Java中的序列化可以使用ObjectOutputStream和ObjectInputStream类来实现。ObjectOutputStream可以将一个对象序列化为字节流并输出到文件或网络流中,而ObjectInputStream可以将字节流反序列化为对象。 下面是一个简单的Java序列化示例: ```java import java.io.*; public class SerializationDemo { public static void main(String[] args) { // 创建一个Person对象 Person person = new Person("Tom", 20); // 将Person对象序列化到文件中 try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("person.ser"))) { out.writeObject(person); } catch (IOException e) { e.printStackTrace(); } // 从文件中读取Person对象 try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("person.ser"))) { Person p = (Person) in.readObject(); System.out.println(p); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } } class Person implements Serializable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } } ``` 在上面的示例中,我们创建了一个Person类,并实现了Serializable接口。然后将一个Person对象序列化到文件中,并从文件中读取并反序列化为Person对象。最后输出反序列化得到的Person对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值