File类和IO流

File类的常用方法

booleanexists()  测试此抽象路径名表示的文件或目录是否存在。
booleanisDirectory()` 测试此抽象路径名表示的文件是否为目录。
booleanisFile()  测试此抽象路径名表示的文件是否为普通文件。
常用方法:
//        表示的文件或目录是否真的存在?
        
        System.out.println(f1.exists());


//        判断是否表示的是文件?
        System.out.println(f1.isFile());

//        判断是否表示的是目录?
        System.out.println(f1.isDirectory());


//        获取文件或目录信息
//        获取文件名或目录名
        System.out.println(f1.getName());


//        获取文件或目录的路径
        System.out.println(f1.getPath());


//        获取文件或目录的可读、可写、可执行、是否是隐藏属性信息
        System.out.println(f1.canRead());
        System.out.println(f1.canWrite());
        System.out.println(f1.canExecute());
        System.out.println(f1.isHidden());


//        获取最后修改时间
        System.out.println(new  Date(f1.lastModified()));


//        获取内容的长度,单位是字节
        System.out.println(f1.length());//返回文件中的数据大小

//        目录的遍历方法
//        获取当前目录包含的所有子目录名和文件名
        String[] list = f1.list();
        for (String s : list) {
            System.out.println(s);
        }

//      获取当前目录包含的所有子目录对象和文件对象
        File[] files = f1.listFiles();
        for (File file : files) {
            System.out.println(file.getName());
        }

 新建和删除方法
        File   f5=new File("C:\\Users\\lx\\Desktop\\1.txt");

        if(!f5.exists()){
//            在磁盘中创建这个文件
            try {
                f5.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        if(f5.exists()){
//            删除磁盘中的这个文件
            f5.delete();
        }


        File   f6=new File("C:\\Users\\lx\\Desktop\\a");
        if(!f6.exists()){
//            在磁盘上创建目录
            //f6.mkdir();
            f6.mkdirs();
        }

        if(f6.exists()){
//            删除磁盘上的目录
            f6.delete();
        }

 

IO流

 2、IO流的分类

(1)从传输方向,分为输入流和输出流。

输入流:负责读取数据。

输出流:负责写入数据。

(2)从处理单位,分为字节流和字符流。

字节流:按照字节为单位进行传输。

字符流:按照字符为单位进行传输。

(3)从功能上,分为节点流和高级流。

节点流:只有读写功能。

高级流:除了读写,还有其他功能的流。

字节流和字符流区别

(1)字节流以字节为单位进行读写,字符流是以字符为单位进行读写。

(2)字节流写操作立即执行,字符流写操作需要调用flush或close方法时才执行。

(3)字节流可以传输任何类型的数据(文本、图片、音频、视频==),字符流只能传输字符数据(文本)。

 高级流

前面讲的这些字节流和字符流都是节点流,只有基本的读写功能。

高级流不仅能够读写,还有其他增强的功能。

高级流是建立在节点流的基础上创建。

先建节点流,然后创建高级流。

常用的高级流有: 转换流, 缓冲流,序列化流

缓冲流

默认缓冲区大小:8192字节。

使用缓冲流读写原理:     将读取的数据先临时存储在缓冲区;当缓冲区写满了,才会将缓冲区的数据写入目的端。

使用缓冲流的优点:         提高了IO效率,同时减少了对硬盘的损耗。

字节缓冲流

字节缓冲输入流:BufferedInputStream

字节缓冲输出流:BufferedOutputStream

序列化流

将对象转为字节码(二进制)的过程,我们称为对象的序列化。

将字节码转为对象的过程,我们称为对象的反序列化。

对象存储或者传输时,必须是二进制形式,所以要进行序列化操作。

 

StreamCorruptedException问题处理

每次写对象都会添加头部标记,导致读取对象时出现StreamCorruptedException。

解决:重写ObjectOutputStream的writeStreamHeader方法。只第一次添加对象时设置头部,后续不再设置。

序列化接口说明

在序列化和反序列化的时候,需要将对象转为Serializable类型,因此需要实体类实现Serializable接口。

序列化版本号:

private static final long serialVersionUID = 1L;

在反序列化的时候会比对版本,一致才能完成反序列化。否则报错,操作失败。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值