zoukankan      html  css  js  c++  java
  • 2018-08-21文件字节输出流OutputStream+文件字节输入流InputStream+字符输出流FileReader+字符输出流FileWriter

    字节输出流OutputStream:

    OutputStream此抽象类,是表示输出字节流的所有类的超类!操作的数据都是字节,定义了输出字节流的基本共性功能方法!

    //输出流中定义都是写write方法,如下图:

    FileOutputStream文件字节输出流:

    OutputStream有很多子类,其中子类FileOutputStream可用来写入数据到文件!

    FileOutputStream类,即文件输出流,是用于将数据写入 File的输出流!

    //Ctrl+T查看类之间的层级继承关系!

     

    //可以传入一个File对象,也可以传入一个表示文件路径的字符串!

    给文件中续写和换行:

    //布尔类型的append值,默认是false,即执行一下代码,覆盖源文件,如果设置为true,则是续写!

    IO流的异常处理:

    package com.oracle.output;
    import java.io.FileOutputStream;
    import java.io.IOException;
    public class IODemo {
        public static void main(String[] args){
            //只要是释放资源的代码,无论前面发不发生异常都需要执行,所以要全部放到finally里面去!
            //创建FileOutputStream文件字节输出流对象,并赋值为NULL:
            FileOutputStream fos=null;
            try {
                //将fos赋值为F盘Demo.txt,设置为续写:
                fos=new FileOutputStream("F:\IOTest\Demo.txt",true);
                fos.write(100);
            }catch(IOException ex) {
                //运行时异常,一旦发生异常立马终止程序!
                throw new RuntimeException("文件写入失败!");
            }finally {
                try {
                    //下面只有一句代码可以这么写,避免发生空指针异常!
                    if(fos!=null)
                    fos.close();
                } catch (IOException e) {
                    throw new RuntimeException("文件写入失败!");
                }
            }
            
        }
    }

    字节输入流InputStream:

    InputStream此抽象类,是表示字节输入流的所有类的超类;定义了字节输入流的基本共性功能方法!

    //注意:只要调用read()方法,就是读取下一个字节,类似ResultSet中的next()方法!

    int read():读取一个字节并返回,没有字节返回-1!

    int read(byte[]):读取一定量的字节数,并存储到字节数组中,返回读取到的字节数!

    FileInputStream文件字节输入流:

    InputStream有很多子类,其中子类FileInputStream可用来读取文件内容;

    FileInputStream 从文件系统中的某个文件中获得输入字节!

    //构造方法:

    FileInputStream类读取数据的Read方法:

    //注意:调用read()方法就是读取下一个字节!

    示例代码:

    package com.oracle.output;
    import java.io.FileInputStream;
    import java.io.IOException;
    public class InputStreamDemo {
        public static void main(String[] args) throws IOException {
            //创建文件字节输入流对象,并读取TestInput.txt文件:
            FileInputStream fis=new FileInputStream("F:\IOTest\TestInput.txt");
            //根据read()方法的特点,读不到数据即返回-1,所以可以用while循环依次读取文档中内容:
            int len=0;
            //用自定义int变量len来代替read()方法,原因是read()方法调用一次即读取下一个!
            while((len=fis.read())!=-1) {
                System.out.println((char)len);
            }
            //关闭流:
            fis.close();
        }
    }

    OutputStream示例:

    package com.oracle.output;
    import java.io.FileOutputStream;
    import java.io.IOException;
    public class OutputStreamDemo {
        public static void main(String[] args) throws IOException {
            //FileOutputStream的构造方法,如果文件存在,则覆盖,如果不存在则创建该文件!
            //true是续写,false是覆盖,默认是false!
            FileOutputStream fos=new FileOutputStream("F:\IOTest\Bian.txt",true);
            //这个是ASCII码:
            fos.write(100);
            fos.write(49);
            fos.write(48);
            fos.write(48);
            //用write方法传入一个字节数组,负数是汉字(一个汉字占两个字节):
            byte[] bytes= {-65,-66,-67,-68};
            fos.write(bytes,1,2);
            fos.write("FUCK YOU BRO".getBytes());
            //换行:
    
            fos.write("卢本伟
    牛逼!".getBytes());
            fos.close();
        }
    }

    字符编码表:

    //ANSI不是一种编码方式,这里代指系统默认编码方式!

    1;ASCII:一个字节中的7位就可以表示,对应的字节都是正数!

    2;ISO-8859-1:拉丁码表Latin!

    3;GB2312:简体中文码表,包含6000-7000中文和符号!用两个字节表示,两个字节第一个字节是负数,第二个字节可能是正数!

    4;GBK:目前最常用的中文码表,2万的中文和符号!用两个字节表示,其中的一部分文字,第一个字节开头是1,第二字节开头是0!

    5;GB18030:最新的中文码表,目前还没有正式使用!

    6;Unicode:国际标准码表,无论是什么文字,都用两个字节存储(Java中的Char类型用的就是这个码表,一个Char变量占两个字节)!

    //Java中的字符串是按照系统默认码表来解析的,简体中文版字符串默认的码表是GBK!

    7;UTF-8:基于Unicode,一个字节就可以存储数据,不要用两个字节存储,而且这个码表更加的标准化,在每一个字节头加入了编码信息(后期到API中查找)!

    //能识别中文的码表:GBK,UTF-8!正因为识别中文码表不唯一,涉及到了编码解码问题!

    //对于我们开发而言,常见的编码 GBK +UTF-8+ISO-8859-1

    文字-->数字:编码:“ABC”.getBytes()返回byte[]数组!

    数字-->文字:解码:byte[] bytes={97,98,99},new String(bytes)返回String字符串!

    FileReader读取包含中文的文件:

    字符输入流Writer:

    //FileWriter的构造方法:

    flush()和close()的区别:

    用flush()方法刷新缓冲之后还可以继续写入,close虽然会刷新缓冲,但是之后不能继续写入!

    作业代码:

    package com.oracle.homework;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    public class HW1 {
        public static void main(String[] args) throws IOException {
            //明确数据源:
            FileReader fr=new FileReader("F:\IOTest\TestPic.jpg");
            //找到目的地:
            FileWriter fw=new FileWriter("F:\IOTest\TestPic\TestPicZF.jpg");
            int len=0;
            char[] testC=new char[1024];
            while((len=fr.read(testC))!=-1){
                fw.write(new String(testC,0,len));
            }
            //关流:
            fr.close();
            fw.close();
            //字符流复制图片会使图片损坏!!!
        }
    }
    
    package com.oracle.homework;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    public class HW2 {
        public static void main(String[] args) throws IOException {
            //明确数据源:
            FileInputStream fis=new FileInputStream("F:\IOTest\TestPic.jpg");
            //找到目标:
            FileOutputStream fos=new FileOutputStream("F:\IOTest\TestPic\TestPicZJ.jpg");
            int len=0;
            byte[] bytes=new byte[1024];
            while((len=fis.read(bytes))!=-1){
                fos.write(bytes,0,len);
            }
            //关流:
            fis.close();
            fos.close();
        }
    }

    课堂示例代码:

    package com.oracle.reader;
    import java.io.FileReader;
    import java.io.IOException;
    public class ReaderDemo {
        public static void main(String[] args) throws IOException {
            FileReader fr=new FileReader("F:\IOTest\TestReader.txt");
            int len=0;
            char[] ch=new char[1024*10240];
            while((len=fr.read(ch))!=-1){
                System.out.print(new String(ch,0,len));
            }
            fr.close();
        }
        public static void method1(FileReader fr) throws IOException{
            int len=0;
            while((len=fr.read())!=-1){
                System.out.print((char)len);
            }
            fr.close();
        }
    }
    
    package com.oracle.reader;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    public class RWCopy {
        public static void main(String[] args) throws IOException {
            //明确数据源:
            FileReader fr=new FileReader("F:\IOTest\TestReader.txt");
            //明确目的地:
            FileWriter fw=new FileWriter("F:\IOTest\TestReaderCopy.txt");
            int len=0;
            char[] ch=new char[1024*10240];
            while((len=fr.read(ch))!=-1){
                fw.write(new String(ch,0,len));
            }
            fr.close();
            fw.close();
        }
    }
    
    package com.oracle.reader;
    import java.io.FileWriter;
    import java.io.IOException;
    public class WriterDemo {
        public static void main(String[] args) throws IOException {
            //写入中文字符:
            FileWriter fw=new FileWriter("F:\IOTest\TestReader.txt");
            //写在缓冲区内:
            fw.write("火云邪神,天下第一");
            //刷入或者close关闭写入文件:
            fw.flush();
            //fw.close();
        }
    }

    文件复制代码:

    package com.oracle.copyfile;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    public class CopyDemo {
        public static void main(String[] args) throws IOException {
            long time1=System.currentTimeMillis();
            //明确数据源(要复制哪个文件):
            @SuppressWarnings("resource")
            FileInputStream fis=new FileInputStream("E:\文件下载\CentOS-6.0-i386-LiveCD.iso");
            //明确目的地(要复制到哪儿去):
            @SuppressWarnings("resource")
            FileOutputStream fos=new FileOutputStream("E:\文件下载\FUCK\CentOS-6.0-i386-LiveCD.iso",true);
            byte[] bytes=new byte[5];
            int len=0;
            while((len=fis.read(bytes))!=-1){
                fos.write(bytes,0,len);
            }
            long time2=System.currentTimeMillis();
            System.out.println(time2-time1);
            fis.close();
            fos.close();
        }
    }
    
    package com.oracle.copyfile;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    public class CopyDemo02 {
        public static void main(String[] args) throws IOException {
            //字节流用于不带中文字符的赋值复制!
            long time1=System.currentTimeMillis();
            //明确数据源:
            FileInputStream fis=new FileInputStream("E:\文件下载\CentOS-6.0-i386-LiveCD.iso");
            //明确目的地:
            FileOutputStream fos=new FileOutputStream("E:\文件下载\FUCK\CentOS-6.0-i386-LiveCD.iso");
            int len=0;//获取读取字节的有效长度
            byte[] bytes=new byte[1024*10240];
            while((len=fis.read(bytes))!=-1){
                fos.write(bytes,0,len);
            }
            long time2=System.currentTimeMillis();
            System.out.println(time2-time1);
            fis.close();
            fos.close();
        }
    }
  • 相关阅读:
    xamarin 安卓输出中文错误 乱码解决
    xamarin自定义 application 无法调试
    Xamarin中 ios 修改Assets.xcassets 文件后 无法调试和编译
    xamarin 编译出现Xamarin.Build.Forms.Tasks.GetTaskAbi 无法加载的错误解决方法
    13、最新安卓Xamarin绑定相关填坑之旅
    12、xamarin form中实现H5 网页唤醒微信支付的方法
    11、使用xamarin实现全屏播放rtmp之类的直播视频
    8.在XamarinAndroid上进一步控制包的大小
    Xamarin.Forms 中iOS通过URL Scheme判断应用是否安装
    Xamarin.Android 使用PopupMenu遇到的问题
  • 原文地址:https://www.cnblogs.com/postgredingdangniu/p/9512438.html
Copyright © 2011-2022 走看看