Java语言程序设计——篇十三(3)

在这里插入图片描述
在这里插入图片描述

       🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿

  • 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳🌳
    您的点赞👍、关注➕、收藏⭐️、评论📝、私信📧是我最大的支持与鼓舞!!!🌻🌻🌻

在这里插入图片描述

对象序列化与对象流

  • 将程序中的对象输出到外部设备(如文件、网络)中,称为对象序列化(serialization)。反之,从外部设备将对象读入程序中称为对象反序列化(deserialization)。
  • 一个类的对象要实现序列化,必须实现java.io.Serializable接口,该接口的定义如下。
public interface Serializable{}
  • ObjectInputStream是对象输入流,继承了InputStream类,实现了ObjectInput接口。
  • ObjectOutputStream是对象输出流,继承了OutputStream类,实现了ObjectOutput接口。

用ObjectOutputStream写出对象

  • 构造方法为:
 ObjectOutputStream(OutputStream out)
  • writeObject()方法格式为:
final void writeObject(Object obj)   throws IOException
  • 接口还定义多个方法用来输出基本数据类型,如
    public void writeInt(int v)
    public void writeFloat(float v)
    public void writeDouble(double v)
  • 下面代码将一些数据和对象写到对象输出流中。
   FileOutputStream fos = new FileOutputStream("data.ser");
   ObjectOutputStream oos =  new ObjectOutputStream(fos);
   oos.writeInt(2010);        // 写出一个整数
   oos.writeObject(“你好”);     // 写出一个字符串
   oos.writeObject(LocalDate.now());     // 写出一个日期对象

用ObjectInputStream读出对象

  • 构造方法为:
public ObjectInputStream(InputStream in)
  • readObject()方法格式为:
    public final Object readObject()   throws IOException
  • 该接口中定义多个方法用来读入基本数据类型,如
    public int  readInt()
    public float readFloat()
    public double readDouble()
  • 下面代码建立一个对象输入流对象。
   FileInputStream fis = new FileInputStream("data.ser");
   ObjectInputStream oip = new ObjectInputStream(fis);
   int i = ois.readInt();
   String today = (String)ois.readObject();
   LocalDate date = (LocalDate)ois.readObject();
  • 对象序列化需要注意的事项:
    1️⃣序列化只能保存对象的非static成员,不能保存任何成员方法和static成员变量,而且序列化保存的只是变量的值。
    2️⃣用transient关键字修饰的变量为临时变量,也不能被序列化。
    3️⃣如果成员变量为引用类型,引用的对象也被序列化。

序列化数组

  • 数组是对象,也可以被序列化。如果数组中的所有元素都是可序列化的,这个数组就是可序列化的。
  • 一个完整的数组可以用·writeObject()·方法存入文件,之后用·readObject()·方法读取到程序中。

NIO和NIO.2

  • 为了增强Java I/O功能,在JDK 1.4中增加了一些新的API,称为New I/O(NIO), NIO API是java.nio包及其子包中定义的。
  • 在JDK 7中又新引进了一些包,称作NIO.2,用来对现有技术进行补充。NIO.2的接口和类通过java.nio.file包及其子包提供。

文件系统和路径

  • 一个文件系统可以包含三类对象:
    ① 文件
    ② 目录(也称文件夹)
    ③ 符号链接(symbolic
    在这里插入图片描述
  • 绝对和相对路径:
    ① 绝对路径(绝对路径是以根元素为起点的路径,包含定位文件的所有信息。D:\study\user\report.txt)
    ② 相对路径相对路径是不包含根元素的路径,例如,study\com\Hello.java

FileSystem类

  • FileSystem表示一个文件系统,它是一个抽象类,可以调用FileSystems类的getDefault()静态方法来获取当前的文件系统。
FileSystem fileSystem = FileSystems.getDefault();
  • FileSystem类常用方法:
   abstract Path getPath(String first, String …more)
   abstract String getSeparator()
   abstract Iterable<Path>getRootDirectores()
   abstract boolean isOpen()
   abstract boolean isReadOnly()

Path接口对象

  • 在Java 7中应使用NIO.2的java.nio.file.Path接口对象代替java.io.File。
  • 可以使用Paths(注意是复数)类的get()方法创建Path对象:
   Path p1 = Paths.get("D:\\study\\com\\Hello.java");
   Path p2 = Paths.get(args[0]);
   Path p3 = Paths.get(
                   URI.create("file:///users/joe/FileTest.java"));
  • 检索路径信息:
  • Path对象可以看做是一个名称序列,每一级目录可以通过索引指定。目录结构的最顶层索引为0,目录结构的最底层元素索引是n-1,n是总层数。例如,getName(0)方法将返回最顶层目录名称。
    Path path = Paths.get("D:\\study\\user\\report.txt");
    System.out.println("getFileName:" + path.getFileName());

博主用心写,读者点关注,互动传真情,只是不迷路。

评论 65
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾听一世,繁花盛开

你的鼓励是我创作最大的动力与支

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值