IO流简单介绍及Demo——读取文件、写出文件、设置编码

版权声明:本文为博主吕小布原创文章,未经允许不得转载。 https://blog.csdn.net/qq_36769100/article/details/82760013

摘要:在Java中,想要读写文件,大多采用的都是流的形式,那么今天就来记录一下这传说中的流。

目录

一、流的简单介绍

二、写出文件Demo<并设置编码>

三、读取文件Demo<并设置编码>


一、流的简单介绍

Java中流主要分为两大类:字符流和字节流,放一张我盗的图:

IO流的大体分类

字节流<图中右侧分支>:

    字节流,就是以字节为处理对象进行写入写出,比如处理string字符串时,需要将其转换成字节(getByte)然后进行操作。

    注意:字节流可以设置编码格式.(划重点)

字符流<图中左侧分支>:

    字符流,可直接对字符串进行操作,无需转换为字节

    注意:字符流不能直接设置编码格式,只能通过调用字节流进行设置。(具体可看以下Demo)

当然,以上只是简单的介绍,如果想深入了解的大佬,请自己另行百度。

另外,啰嗦一句:流的概念是以Java程序为本体的

所以将字符串从程序中保存到本地文件,叫out,也叫writer(写出);

相反,在程序中读取本地文件,就叫做in,也叫reader(读取)。

二、写出文件Demo<并设置编码>

废话不多说,直接上代码:

/**
     * 将传入字符串,写到本地指定文件中
     * @param str
     */
    public static void handIo(String s){

        //写出文件的保存位置
        String filePath = "D:\\flie\\test.xml";
        File file = new File(filePath);

        Writer bw = null;
        try {
            //判断文件是否存在
            if(!file.exists()){//如果不存在,新建文件
                file.createNewFile();
            }
            //调用字节流,设置写入文件编码格式
            OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream(filePath),"GBK");
            //设置文件内容为覆盖模式
            bw = new BufferedWriter(ow);

            //设置文件内容往后追加,默认为false
            //bw = new BufferedWriter(new FileWriter(file, true));

            //写入
            bw.write(s);
            
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //关闭流
            try {
                if(bw != null){
                    bw.flush();
                    bw.close();

                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

简单补充两点:

  • 2.1.以上Demo,通过字节流,将编码设置为GBK后写入文本,如果你的文本默认已非GBK编码打开,那么打开文本后,显示出来的内容会乱码。但是,当你读取文件时,只要设置编码格式也为GBK,那么就会成功读取文件中的内容。
  • 2.2.Demo中初始化BufferedWriter时传入的ow字节流可以用FileWriter替换,只是无法通过这种形式设置编码。
  • 2.3.写出文件就不放控制台输出了。

三、读取文件Demo<并设置编码>

    public static String handIo() {
        StringBuffer sb = new StringBuffer();

        //日常指定读取的文件
        String filePath = "D:\\flie\\test.xml";
        File file = new File(filePath);

        if (!file.exists()) {
            System.out.println("文件不存在");
        } else {
            //初始化读取操作的br对象
            BufferedReader br = null;

            try {
                //调用字节流,设置读取文件的编码格式
                InputStreamReader ir = new InputStreamReader(new FileInputStream(filePath), "GBK");

                br = new BufferedReader(ir);

                //格式固定,对象名len可以自拟
                String len = null;
                while ((len = br.readLine()) != null) {
                    //逐行输出
                    System.out.println("....." + len);

                    sb.append(len);
                }

            } catch (IOException e) {
                e.printStackTrace();
            } finally {

                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return sb.toString();
    }

这里也简单说两点:

  • 3.1.readLine()可以判断是否是最后一行,但是格式基本如Demo固定
  • 3.2.控制台输出如下(与文件中内容一致):
.....<User>
.....  <name>吕小布</name>
.....  <age>23</age>
.....  <customer>
.....    <Customer>
.....      <commodity>手表</commodity>
.....    </Customer>
.....    <Customer>
.....      <commodity>电脑</commodity>
.....    </Customer>
.....  </customer>
.....</User>
如果有书写错误的地方,或者是有问题的地方请及时评论或者是私信我,以免误导个别萌新。
虽然我也是个萌新。
你好,我叫吕小布。

猜你喜欢

转载自blog.csdn.net/qq_36769100/article/details/82760013