Java中IO流(3).

1.java.io.DateOutputStream数据专属流    !!!!!为什么我的idea没有这个流!!!!!
这个流可以将数据连同数据类型一并写入文件
注意:这个文件不是普通文本文档(记事本打不开乱码)
DateInputStream 数据字节输入流
DateOutputStream写的文件只能用DateInputStream来读,并且读的时候你需要提前知道写入的顺序
读的顺序要和写的顺序一样才能正常读取
2.java.io.PrintStream标准的字节输出流 默认输出到控制台
System.out的返回值其实就是PrintStream
标准输出流不需要手动close()关闭
可以改变标准输出流的输出方向吗?可以!
PrintStream s=new PrintStream(new FileOutputStream("hhh"));//不需要手动关闭
          System.setOut(s);//标准输出流不再指向控制台,指向hhh
--------可以用这个来做日志工具logger
3.File   java.io.File
(1)File类和四大家族没有关系,所以File类不能完成文件的读和写
(2)File对象代表什么?
        文件和目录路径名的抽象表示形式
      C:\dwad  这是一个file对象
      一个File对象有可能对应的是目录,也有可能是文件
   File只是一个路径名的抽象表示形式
(3)掌握File类中常用的方法

===================================
package io;

import java.io.File;

public class FileTest01 {
    public static void main(String[] args) throws Exception{
        /*File f=new File("D://nihao");
        System.out.println(f.exists());//判断此文件是否存在
        //如果不存在,以文件形式创建出来
        if(!f.exists()){
            f.createNewFile();
        }
        //如果不存在,以目录形式创建出来
        if(!f.exists()){
            f.mkdir();
        }*/
        //创建多重目录
        /*File f2=new File("D://a//b//c//d//e");
        if(!f2.exists()){
            f2.mkdirs();//注意有s
        }*/
        File f3=new File("D:\\a\\b\\c\\d\\e");
        String parent=f3.getParent();//(返回值String)
        System.out.println(parent);//D:\a\b\c\d
       File s= f3.getAbsoluteFile();//获取绝对路径返回值File
        System.out.println(s);
        File f4=new File("hhh");
        File s1= f4.getAbsoluteFile();//获取绝对路径返回值File!!!!!!!!!!!!!!!!这个好
        System.out.println(s1);
    }
}
===========================================
package io;

import java.io.File;
import java.sql.SQLOutput;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileTest02 {
    public static void main(String[] args) {
        File f=new File("D:\\File测试\\坠入爱河.txt");
        System.out.println("文件名为"+f.getName());//获取文件名字
        System.out.println(f.isDirectory());//判断是否是一个目录
        System.out.println(f.isFile());//判断是否是一个文件
        long haoMiao=f.lastModified();//获取文件最后一次修改的时间
        Date time=new Date(haoMiao);//将总毫秒数转换成日期
        SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SS");
        System.out.println(s.format(time));
        System.out.println(f.length());//获取文件大小
    }
}
================================
package io;

import java.io.File;

public class FileTest03 {
    public static void main(String[] args) {
        File f=new File("D:\\555");
        File[] files=f.listFiles();//获取当前目录下的子目录
        for (File ff :files
             ) {
            System.out.println(ff.getAbsoluteFile());
            System.out.println(ff.getName());
        }
    }
}
=========================


4.序列化:Serialize 把内存中的java对象拆分序列化到硬盘文件中叫ObjectOutputStream将java对象保存下来的过程
反序列化:DeSerialize把硬盘文件中的数据重新恢复到内存中,恢复成java对象叫ObjectInputStream
5.参与序列化和反序列化的对象,必须实现Serializable接口
6.注意:通过源码发现Serializable接口只是一个标志接口
public interface Serializable{
}
这个接口当中什么代码都没有
起到一个什么作用呢?  起到标识的作用,java虚拟机看到这个类实现了这个接口,可能会对这个类进行特殊待遇
Serializable这个标志接口是给java虚拟机参考的,java虚拟机看到这个接口之后,会为该类自动生成一个序列化版本号
7.一次序列化多个对象?
   可以,可以将对象放到集合中,序列化集合
参与序列化的ArrayList集合以及集合中的元素类型都需实现java.io.Serializable
private transient  String name;// transient关键字游离的,不参与序列化  name不参与序列化
8.一个类实现Serializable接口后,java虚拟机会自动生成一个序列化版本号,过了很久
这个类的源代码改动了,需要重新再编译,编译之后生成了全新的字节码文件,并且class文件再次运行的时候,java虚拟机
生成的序列化版本号也会发生相应的改变
9.java语言中采用什么机制来区分类?
第一:首先通过类目进行对比,如果类名不一样,肯定不是同一个类
第二:如果类名一样,再怎么进行类的区别?靠序列化版本号进行区分
10.不同的人编写了同一个类,但“这两个类确实不是同一个类”,这个时候序列化版本就起作用了
对于java虚拟机来说,java虚拟机是可以区分这两个类的,因为这两个类都实现了Serializable接口
都有默认的序列化版本号,他们的序列化版本号不一样,所以区分开了
11.这种自动生成的序列化版本号缺点是:一旦代码确定之后,不能进行后续的修改,
因为只要修改,必然会重新编译,此时会生成全新的序列化版本号,这个时候java虚拟机会认为这是一个全新的类
12.结论:凡是一个类实现了Serializable接口,建议给该类提供一个固定不变的序列化版本号,这样,
以后这个类代码修改了,但版本号不变,java虚拟机会认为是同一个类
13手动写出序列化版本号:private static final long serialVersionUID=1156455L
14.IO+Properties的联合应用
非常好的一个设计理念:
    以后经常改变的数据,可以单独写到一个文件中,使用程序动态读取
   将来只需要修改这个文件的内容,java代码不需改动,不需要重新编译,服务器也不需要重启,就可以拿到动态地信息

类似于以上机制的这种文件称为:配置文件
并且配置文件中的内容格式是:
    key1=value
   key2=balue
的时候,我们把这种配置文件叫做属性配置文件

java规范中有要求:属性配置文件建议以.properties结尾,但这不是必须的
这种以.properties结尾的文件再java中被称为:属性配置文件
其中Properties是专门存放属性配置文件内容的一个类
(属性配置文件中井号#是注释,属性配置文件的key重复的话,value会自动覆盖)
===================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我不想打酱油

谢谢啦!我会加油的!

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

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

打赏作者

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

抵扣说明:

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

余额充值