zoukankan      html  css  js  c++  java
  • FileInputStream读取文件&FileOutputStream写入文件

    概念摘自:http://jingyan.baidu.com/article/5552ef473ab5f2518ffbc98e.html

     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+"	"+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()+"
    ";;
                
                /******************(方法一)按字节数组写入**********************/
                //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();

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

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

  • 相关阅读:
    Ros学习——Cmakelists.txt文件解读
    Ros学习——Movebase源码解读
    C++——STL之vector, list, deque容器对比与常用函数
    Ros学习——移动机器人Ros导航详解及源码解析
    C++——多线程
    C++——STL容器
    PHP对图片按照一定比例缩放并生成图片文件
    PHP二维数组排序
    PHP裁剪图片并上传完整demo
    [PHP] php实现文件下载
  • 原文地址:https://www.cnblogs.com/xh_Blog/p/6590964.html
Copyright © 2011-2022 走看看