FileInputStream读取文件&FileOutputStream写入文件

来源:互联网 发布:铠钾网络招聘 编辑:程序博客网 时间:2024/05/24 00:43

Java的流式输入输出建立在4个抽象类的基础上:InputStream,OutputStream,Reader和Writer。它们用来创建具体的流式子类。InputStream和OutputStream类被设计为字节类,而Reader和Writer被设计为字符流类。

 一般,处理字符和字符串用字符流类,字节和二进制文件用字节类。本篇只讲字节流类;

 

 字节流中的两个顶层类为:InputStream(输入字节流)和OutputStream(输出字节流). 其下有两个子类FileInputStream(文件输入流)和FileOutputStream(文件输出流)。

 FileInputStream读取的两种方法:逐字节读;以字节数组读取两种方式;

复制代码
public static void main(String[] args) {        //创建文件对象,指定要读取的文件路径(要读的文件一定要存在)        File file=new File("E:\\a.text");                try {            //创建文件输入流对象.指定要读取的文件对象            FileInputStream fin=new FileInputStream(file);                        /***********方法一(将输入流的数据传递给字节数组)*********/            //创建字节数组,准备将文件流中的数据传给字节数组            /*byte[] b=new byte[fin.available()];                        //将字节流中的数据传递给字节数组            fin.read(b);                        //将字节数组转为字符串            String s=new String(b);                        System.out.println(s);*/            /*********************************************/                        /********方法二(逐字节读取数据从字节输入流)***********/            int l;            while ((l=fin.read())!=-1) {                System.out.println((char)l);                //测试read()方法的含义,什么是逐字节读,及int类型的l代表什么意思,测试结果l代表存储的内容的int的表现形式,与进制相关,不做深究                //System.out.println((char)l+"\t"+l);            }                        fin.close();            /************************************************/                    } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }
复制代码

 

FileOutputStream写入文件的两种方式:以字节数组写入;逐字节写入;

复制代码
public static void main(String[] args) {        // TODO Auto-generated method stub        //创建文件对象,指定要写出的文件路径        File file=new File("d:\\d.text");                try {            //创建文件字节输出流对象,准备向d.txt文件中写出数据,true表示在原有的基础上增加内容            FileOutputStream fout=new FileOutputStream(file,true);            Scanner sc=new Scanner(System.in);                        System.out.println("请写出一段字符串:");            String msg=sc.next()+"\r\n";;                        /******************(方法一)按字节数组写入**********************/            //byte[] bytes = msg.getBytes();//msg.getBytes()将字符串转为字节数组                        //fout.write(bytes);//使用字节数组输出到文件            /******************(方法一)逐字节写入**********************/            byte[] bytes = msg.getBytes();            for (int i = 0; i < bytes.length; i++) {                fout.write(bytes[i]);//逐字节写文件            }            fout.flush();//强制刷新输出流            fout.close();//关闭输出流            System.out.println("写入完成!");        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }
复制代码

字节流转化为字符流

复制代码
            //创建字节输出流对象            FileOutputStream fout=new FileOutputStream(new File("student.xml"));            //创建字节流缓冲区,加快写出速度            BufferedOutputStream bout=new BufferedOutputStream(fout);                        //创建字符输出流对象            BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(bout, "utf-8"));                        doc.write(bw);                        bw.flush();            bw.close();
复制代码

为什么将字节流转化为字符流?

因为字节流是二进制读写的,在外部打开是乱码,转化为字符串或字符可以让文件在外部也可以看到内容!根据具体的需求确定用哪个!

阅读全文
0 0
原创粉丝点击