美文网首页java随笔
IO流----编码----转换流

IO流----编码----转换流

作者: 71150ce14a00 | 来源:发表于2017-07-09 17:47 被阅读18次
    InputStream(抽象的)字节输入流顶层父类

    FileInputStream子类:
    构造方法:

    FileInputStream(path) 底层帮我们转File类型了,所以常用此方法
    FileInputStream(file)
    

    1.输入流如果找不到要读取的文件会抛异常
    2.一定要是读取文件,如果是文件夹会抛异常

    OutputStream(抽象的)字节输入流的顶层父类

    子类FileOutputStream
    构造方法

    FileOutputStream(path) 常用此方法
    fileOutputStream(file)
    

    1.如果指定路径的文件不存在,那么会帮我们创建文件,再向文件中写入数据
    2.如果指定整体路径不存在会抛异常
    3.当指定文件已经存在,那么写入的数据会将原来的数据覆盖
    4.流没关之前可以写多个数据

    字节流不带缓冲区,flush() 没有用

    FileInputStream input = new FileInputStream("F:\\aaa\\.1.txt");
    FileOutputStream out = new FileOutputStream("F:\\aaa\\1.txt");
    byte[] buf = new byte[1024];
    int len = 0;
    while((len = input.read(buf))!=-1){
         out.write(buf,0,len);
    }
        input.close();
        out.close();
    

    追加数据和换行:
    FileOutputStream(String name,boolean append)
    换行:
    System.lineSeparator();
    System.getProperty("line.separatory");
    文件切割:102410242 切割2M
    文件有文件头和文件尾,切割完不能完全打开,只要mp3格式可以正常打开

    FileInputStream input = new FileInputStream("F:\\aaa\\视频.mp4");
    byte[] buf = new byte[1024*1024*2];
    int len = 0;
     int name = 1;
     while((len = input.read(buf))!=-1){
         FileOutputStream out = new FileOutputStream("F:\\aaa\\"+name+".mp4");
          out.write(buf,0,len);
           name++;
             out.close();
     }
          input.close();
    

    文件合并:

    FileOutputStream out = new FileOutputStream( "F\\bbb\\1.txt");
              for (int i = 1; i < 10; i++) {
                    FileInputStream input = new FileInputStream("F:\\aaa\\" +i +".txt" );
                     byte[] buf = new byte[1204*1024*2];
                     int len = 0;
                     while((len = input .read(buf )) != -1){
                     out.write( buf, 0, len);
                 }
                     input.close();
                    
             }
              out.close();
    

    在IO流中,只有字节流具备读写文件的能力
    字符流 = 字节流 + 编码表

    编码表:
    ?:表示位置字符
    美国:ASCII 1个字节没有汉字
    欧洲:ISO-8859-1 没有未知字符,1个字节,没有汉字
    中国:GBK
    国际:Unicode(一个字符2个字节)----->utf-8(中文3个字节,字母1个字节)

    转换流:

    硬盘---->内存 字节------>字符 字符转字符输入转换流
    内存----->硬盘 字符------->字节 字节转字符输出转换流

    OutputStreamWriter writer = new OutputStreamWriter( new FileOutputStream("F:\\aaa\\utf.txt" ), "utf-8" );
        writer.write( "你好");
        writer.close();
    InputStreamReader reader = new InputStreamReader(new FileInputStream("F:\\aaa\\utf.txt" ),"gbk" );
        char[] buf = new char[1024];
        int len = 0;
        while((len = reader .read(buf )) != -1){
             System. out.println(new String(buf , 0, len ));
        }
    

    模仿Scanner键盘录入:

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    br.readLine();
    

    相关文章

      网友评论

        本文标题:IO流----编码----转换流

        本文链接:https://www.haomeiwen.com/subject/igtehxtx.html