前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java开发知识IO知识之输入输出流以及文件

java开发知识IO知识之输入输出流以及文件

作者头像
IBinary
发布2019-05-25 16:34:41
5770
发布2019-05-25 16:34:41
举报
文章被收录于专栏:逆向技术逆向技术逆向技术

目录

  • java开发知识IO知识之输入输出流以及文件
    • 一丶流概述
    • 二丶输入流讲解 InputStream类.
      • 1. 输入流以及类层次结构
      • 2.文件操作.使用输入流读取
    • 三丶输出流 OutputStream
    • 四丶文件的常见与删除
      • File类创建文件对象.
      • 1.实例创建文件.获取文件信息
      • FileInputStream类以及OutputStream类的作用
    • 总结

java开发知识IO知识之输入输出流以及文件

一丶流概述

流十一组有序的数据序列.根据操作的类型,可以分为输入流跟输出流两种. IO(input/output)输入/输出流提供了一条通道程序.可以使用这条通道把源的字节序列送到目的地

简单来说. 就是操作二进制. 二进制提供了读写功能. 写就是输出. 读就是输入. 输入输出流图示:

二丶输入流讲解 InputStream类.

1. 输入流以及类层次结构

输入流就是从"文件" 读取到内存. 这个文件是抽象的.意思就是不管什么内容从硬盘也好.任何地方读到内存就是输入流. 
首先InputStream是抽象类. 是素有字节输入流的父类.

抽象类中的方法: read(); 从输入流中读取数据的下一个字节. 返回0~255范围内的int字节. 也就是读取一个字节.如果到了末尾.返回-1 read(byte[] b); 从输入流中读取一个字节数组大小. mark(int readlimit); 输入流当前位置放置一个标记. 参数的意思就是告诉输入流在标记位置失效之前允许读取的字节数. reset(); 将输入指针.返回到当前所做的标记处. 意思就是移动文件指针.移动到你标记的地方. skip(long n); 跳过n个字节.并返回实际跳过的字节数. markSupported(); 如果当前流支持 mark()/reset() 操作就会返回true close(); 关闭流句柄.释放系统资源. InputStream类的层次结构

我们可以看到.有一个FileInputStream 这个类就是操作文件的.

2.文件操作.使用输入流读取

我们可以使用FileInputStream从一个文件中读取字节到内存.

实现代码

    try {
            FileInputStream in = new FileInputStream("1.txt");
            byte szbuf[] = new byte[10];
            in.read(szbuf);//读取到字节数组中
            System.out.println(new String(szbuf));
        } catch (Exception e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }

java中使用的字符集是UNICODE.是两个字节的. 我们的InputStream是处理一个字节的.所以Java专门提供了对Unicode编码的类

三丶输出流 OutputStream

相应的不光有硬盘读取到内存的操作.也有内存写入硬盘的操作.

那就是输出流. 输出流提供的方法就是 write,以及 write的重载. 具体不做解释. 跟上面一样.写入一个. 或者写入一个字节数组. 特有的方法: flush(); 我们在内存写入文件的时候.并没有真正的写入,而是在缓存中.等我们使用close关闭文件的时候. 才能写入到内存.但是我们的需求是在写的过程中要把缓存的数据写到文件中.那么就使用这个方法.

Java是Unicode同样的,针对输出也提供了抽象类.Writer

四丶文件的常见与删除

我们上边讲了输入输出流,大概也知道什么意思了.首先我们讲解文件的信息.

File类创建文件对象.

file类是对文件操作的一个封装.三种构造方法
1.File(String pathName); 给一个路径.创建一个File文件.
2.File(String parent,String child): 根据定义的父路径和子路精创建一个新的文件对象.
3.File(file f,String child); 给一个文件对象.与自己给的一个路径创建一个新的file

ps:对于windows来说.文件的创建路径是 \. 对于unix则不一样. 文件操作的常见方法:

1.实例创建文件.获取文件信息

private static void File() {
        // TODO 自动生成的方法存根
        File f = new File("1.txt");//创建一个文件
        OutputStream out = null;   
        OutputStreamWriter out1 = null;
        try {
            
            //给文件写入内容.创建输出流.
             out = new FileOutputStream(f);//创建输出流,传入文件.对文件操作.
            String str = "HelloWorld";
            //out.write(str.getBytes(), 0, str.length()); //写入到文件中
            out1= new FileWriter(f);//使用Unicode写入
            out1.write(str); //直接写入字符串
            out1.flush();
            out1.close();
            //获取文件信息.
            if(f.exists()) { //判断文件是否存在 文件存在,删除文件,下面重新创建文件.
                f.delete();
                
            }else {
                f.createNewFile();
                String FileName = f.getName(); //获取名字
                long Filelength = f.length();  //获取长度
                boolean bisFile = f.isFile();  //判断是否是个文件
                System.out.println("文件名字 = " + FileName);
                System.out.println("文件长度 = " + Filelength);
                System.out.println("是否文件 = " + bisFile);
            }
            
        }catch(Exception e) {
            e.printStackTrace();
        }
        finally {
            
                try {
                    if(out != null)
                        out.close();
                    if(out1 != null) {
                        out1.close();
                    }
                } catch (IOException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }
        
            
        }
        
    }

FileInputStream类以及OutputStream类的作用

以上我们操作的文件其实都是在内存中操作的.我们必须通过输入输出流使这个文件可以跟内存交互. 读取/写入. 上面两个类就是这个作用. Reader类或者Writer类的作用就是解决上面的输入输出流的缺陷,因为Java是Unicode的.所以我们要两个字节两个字节的读取就使用这两个类即可. Writer对应的类就是 FileWriter传入文件对象即可.与之对应的还有FileReader类.

总结

    1.学习了抽象类 InputStream/OutputStream 输入输出流. 二进制操作读取.或者写入.
    2.文件的创建使用 File类. 可以通过构造创建文件.也可以使用内部方法创建.
    3.文件的删除一样提供了方法.以及判断文件各种信息.或者获取文件各种信息.获取名字,长度等等.
    4.文件操作只是在内存操作.使用FileInputStream类.或者OutputStream使用流的方式跟内存或者文件交互.也就是通过这两个类可以写入到文件.或者读取到内存.
    5.Unicode解决方案使用Writed/Reader抽象类. 具体实现类是 FileReader/FileWriter. 操作跟上面一样.
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-10-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • java开发知识IO知识之输入输出流以及文件
    • 一丶流概述
      • 二丶输入流讲解 InputStream类.
        • 1. 输入流以及类层次结构
        • 2.文件操作.使用输入流读取
      • 三丶输出流 OutputStream
        • 四丶文件的常见与删除
          • File类创建文件对象.
          • 1.实例创建文件.获取文件信息
          • FileInputStream类以及OutputStream类的作用
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档