IO流的梳理

IO流的种类很多的,初学的时候总是梳理一遍之后过了一段时间就觉得生疏忘记了,为此觉得有些懊恼,但后来想想就释然了,觉得学习工作有时候是经验的积累,并不需要将全部知识刻在脑子里,况且人都是有遗忘曲线的,就像学习英文一样没谁能记住所有的单词,能记得足够用的就可以了,遇到生僻词汇,具备快速解决的能力才是比较关键的,当然知识储备自然越深厚越好,下边记录常用的流,有空会在记录每个流使用案例




数据流
DataInputStream  DataOutputStream
特性:
DataInputStream 只能读取由DataOutputStream 写出的文件,否则会出现EOFException,
因为DataOutputStream 在写出的时候会做一些特殊标记,只有DataInputStream 才能成功的读取
对象流
ObjectOutputStream    ObjectInputStream
对象流指的是可以直接把一个对象以流的形式传输给其他的介质,比如硬盘 
一个对象以流的形式进行传输,叫做序列化。 该对象所对应的类,必须实现Serializable接口
简单来说就是对象到文件是对象流,文件到对象是序列化注意对应的类实现Serializable

注意:缓存流,数据流,对象流都是必须建立在一个存在的流基础之上

为什么要用缓存流?
不用缓存流,每次只读取一个字节或者字符,访问硬盘次数很多性能低
缓存流,顾名思义会多读一些数据多缓存些数据用的时候直接从缓存中取,提高性能

数据流和对象流都是基于字节流的都有继承字节流的抽象基类

                当然学习流肯定少不了文件对象File了

下边贴上常用的方法


class File_1{  
    public static void main(String[] args){  
        //用绝对路径创建一个文件对象  
        File f1 = new File("E:/框架");  
        System.out.println("f1的绝对路径"+f1.getAbsolutePath());  
          
        //以f1为父目录创建文件对象  
        File f3 = new File(f1,"Hibernate.doc");  
        System.out.println("f3的绝对路径"+f3.getAbsolutePath());  
          
        //打开文件  
        try{  
            new FileInputStream(f1);  
            System.out.println("打开成功");  
        }catch(FileNotFoundException e){  
            System.out.println("打开失败");  
            e.printStackTrace();  
        }  
        //使用相对路径  
        File f2 = new File("Core Java.pdf");  
        System.out.println("f2的绝对路径"+f2.getAbsolutePath());  
          
          
    }  
}  
  
//文件常用方法1  
class File_2{  
    public static void main(String[] args){  
        File f1 = new File("E:/how2j练习io/lol.txt");  
        System.out.println("f1文件:"+f1);  
        //文件是否存在  
        System.out.println("f1文件是否存在:"+f1.exists());   
        //是否是文件夹  
        System.out.println("f1文件是否是文件加:"+f1.isDirectory());   
        //是否是文件(非文件夹)  
        System.out.println("f1文件是否是文件:"+f1.isFile());   
        //文件长度  
        System.out.println("f1文件长度:"+f1.length());   
            
        //文件最后修改时间  
        long time = f1.lastModified();  
        Date dtime = new Date(time);  
        System.out.println("文件最后修改时间:"+dtime);   
        //设置文件修改时间为1970.1.1 08:00:00  
        //f1.setLastModified(0);  
            
        //文件重命名  
        File f2 = new File("E:/how2j练习io/daota.txt");  
        f1.renameTo(f2);  
        System.out.println("把LOL.exe改名成了DOTA.exe");  
    }  
}  
//文件常用方法2  
class File_3{  
    public static void main(String[] args) throws IOException{  
        File f3 = new File("E:/how2j练习io/how/skin/s.txt");  
        // 以字符串数组的形式,(以当前路径)返回当前文件夹下的所有文件(不包含子文件及子文件夹)  
        String[] strr  = f3.list();  
        for(String each:strr){  
            System.out.println(each);  
        }  
        // 以文件数组的形式,(以绝对路径)返回当前文件夹下的所有文件(不包含子文件及子文件夹)  
        File[] fs = f3.listFiles();  
        for(File each:fs){  
            System.out.println(each);  
        }  
        // 以字符串形式返回获取所在文件夹(就是绝对路径+父文件夹名称)  
        String f3_fatherName = f3.getParent();  
        System.out.println(f3_fatherName);  
        // 以文件形式返回获取所在文件夹(就是绝对路径+父文件夹名称)  
        File fName = f3.getParentFile();  
          
        // 创建文件夹ss,如果父文件夹skin不存在,创建就无效(只能一次创建一个文件夹)  
        System.out.println(f3.mkdir());  
          
        // 创建文件夹ss,如果父文件夹skin不存在,就会创建父文件夹(只能一次创建多个文件夹父文件夹子文件夹。。。。)  
        System.out.println(f3.mkdirs());  
          
  
          
        // 创建一个空文件s.tx如果父文件夹skin不存在,就会抛出异常  
        System.out.println(f3.createNewFile());//boolean  
          
        // 所以创建一个空文件之前,通常都会创建父目录(如果父目录不存在的话)  
        System.out.println(f3.getParentFile().mkdirs());//boolean(只创建父目录或者爷爷目录。。。。。)  
          
        // 列出所有的盘符c: d: e: 等等  
        File[] fc = f3.listRoots();  
        for(File each:fc){  
            System.out.println(each);  
        }  
          
        // 刪除文件  
        System.out.println(f3.delete());//boolean  
          
        // JVM结束的时候,刪除文件,常用于临时文件的删除  
        f3.deleteOnExit();//void 不能打印空值  
          
    }  
}  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值