Java IO学习笔记(1)

简介: Java IO学习笔记(1)

对象的输入输出流 : 对象的输入输出流 主要的作用是用于写对象的信息与读取对象的信息。 对象信息一旦写到文件上那么对象的信息就可以做到持久化了

对象的输出流: ObjectOutputStream .

对象的输入流: ObjectInputStream

输入输出流要注意的细节:


  1. 如果对象需要被写出到文件上,那么对象所属的类必须要实现Serializable接口。 Serializable接口没有任何的方法,是一个标识接口而已。

  2. 对象的反序列化创建对象的时候并不会调用到构造方法的、

  3. serialVersionUID 是用于记录class文件的版本信息的,serialVersionUID这个数字是通过一个类的类名、成员、包名、工程名算出的一个数字。

  4. 使用ObjectInputStream反序列化的时候,ObjeectInputStream会先读取文件中的serialVersionUID,然后与本地的class文件的serialVersionUID

  进行对比,如果这两个id不一致,那么反序列化就失败了。

  5. 如果序列化与反序列化的时候可能会修改类的成员,那么最好一开始就给这个类指定一个serialVersionUID,如果一类已经指定的serialVersionUID,然后

  在序列化与反序列化的时候,jvm都不会再自己算这个 class的serialVersionUID了。

  6. 如果一个对象某个数据不想被序列化到硬盘上,可以使用关键字transient修饰。

 7. 如果一个类维护了另外一个类的引用,那么另外一个类也需要实现Serializable接口。


Properties(配置文件类): 主要用于生产配置文件与读取配置文件的信息。


Properties要注意的细节:

1. 如果配置文件的信息一旦使用了中文,那么在使用store方法生成配置文件的时候只能使用字符流解决,如果使用字节流生成配置文件的话,

默认使用的是iso8859-1码表进行编码存储,这时候会出现乱码。

2. 如果Properties中的内容发生了变化,一定要重新使用Properties生成配置文件,否则配置文件信息不会发生变化。

/*

需求: 使用properties实现本软件只能 运行三次,超过了三次之后就提示购买正版,退jvm.


public class Demo5 {
public static void main(String[] args) throws IOException {
File file = new File("F:\\count.properties");
if(!file.exists()){
//如果配置文件不存在,则创建该配置文件
file.createNewFile();
}
//创建Properties对象。
Properties properties = new Properties();
//把配置文件的信息加载到properties中
properties.load(new FileInputStream(file));
FileOutputStream fileOutputStream = new FileOutputStream(file);
int count = 0; //定义该变量是用于保存软件的运行次数的。
//读取配置文件的运行次数
String value = properties.getProperty("count");
if(value!=null){
count = Integer.parseInt(value);
}
//判断使用的次数是否已经达到了三次,
if(count==3){
System.out.println("你已经超出了试用次数,请购买正版软件!!");
System.exit(0);
}
count++;
System.out.println("你已经使用了本软件第"+count+"次");
properties.setProperty("count",count+"");
//使用Properties生成一个配置文件
properties.store(fileOutputStream,"runtime");
}
}


另一个经典的用法就是IO递归的使用:

public class Demo10 {
  public static void main(String[] args) {
  /*  File dir = new File("F:\\1208project\\day22");
    listFiles3(dir,"|--");*/
    File dir = new File("F:\\aa");
    deleteDir(dir);
  }
  //删除了一个非空的目录
  public static void deleteDir(File dir){ // bb
    File[] files = dir.listFiles(); //列出了所有的子文件
    for(File file : files){
      if(file.isFile()){
        file.delete();
      }else if(file.isDirectory()){
        deleteDir(file);
      }
    }
    dir.delete();
  }
  public static void listFiles3(File dir,String space){ //space 存储的是空格
    File[] files = dir.listFiles(); //列出所有 的子文件
    for(File file : files){
      if(file.isFile()){
        System.out.println(space+file.getName());
      }else if(file.isDirectory()){
        System.out.println(space+file.getName());
        listFiles3(file,"|   "+space);
      }
    }
  }
  //列出一个文件夹的子孙文件与目录。
  public static void listFiles2(File dir,String space){ //space 存储的是空格
    File[] files = dir.listFiles(); //列出所有 的子文件
    for(File file : files){
      if(file.isFile()){
        System.out.println(space+file.getName());
      }else if(file.isDirectory()){
        System.out.println(space+file.getName());
        listFiles2(file,"  "+space);
      }
    }
  }
  //列出一个文件夹的子孙文件与目录。
  public static void listFiles1(File dir){
    File[] files = dir.listFiles(); //列出所有 的子文件
    for(File file : files){
      if(file.isFile()){
        System.out.println("文件名:"+file.getName());
      }else if(file.isDirectory()){
        System.out.println("文件夹:"+file.getName());
        listFiles1(file);
      }   
    }       
  }
}
相关文章
|
19天前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
50 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
27天前
|
Java 数据处理 开发者
揭秘Java IO流:字节流与字符流的神秘面纱!
揭秘Java IO流:字节流与字符流的神秘面纱!
26 1
|
27天前
|
自然语言处理 Java 数据处理
Java IO流全解析:字节流和字符流的区别与联系!
Java IO流全解析:字节流和字符流的区别与联系!
56 1
|
2月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
从Java环境的搭建到实际代码的编写,从基本用法的讲解到底层原理的剖析,深度解析Java基础知识。本文是《Java学习路线》专栏的起始文章,旨在提供一套完整的Java学习路线,覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等全面的知识点,并在未来不断更新和完善,帮助Java从业者在更短的时间内成长为高级开发。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
本文是Java基础的进阶篇,对异常、集合、泛型、Java8新特性、I/O流等知识进行深入浅出的介绍,并附有对应的代码示例,重要的地方带有对性能、底层原理、源码的剖析。适合Java初学者。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
|
12天前
|
Java
Java 中 IO 流的分类详解
【10月更文挑战第10天】不同类型的 IO 流具有不同的特点和适用场景,我们可以根据具体的需求选择合适的流来进行数据的输入和输出操作。在实际应用中,还可以通过组合使用多种流来实现更复杂的功能。
30 0
|
2月前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
21天前
|
Java 数据安全/隐私保护
java学习笔记(基础习题)
java学习笔记(基础习题)
29 0
|
21天前
|
Java 程序员 开发工具
java学习笔记
java学习笔记
33 0