JavaIO之输入输出流

JavaIO之输入输出流

这里是Java系列文章,主要介绍有Java的使用及Java相关的,如Java语言本身以及Java等级考试

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程

因此,为了更好的使用Java,加油学习吧!

关于作者:

· 小白(Libra),计算机兴趣爱好者,Java,python,C,Hadoop
· Email:717560136@qq.com
· GitHub:https://github.com/Regel-zack

转载请注明出处

前言
不管是何种语言,IO操作都会是其关键的一环,Java的IO操作也是如此,这一次我们来学习Java的输入输出流。

字节输出流

package Demo04;

import java.io.*;

public class IODemo05 {

    public static void main(String[] args) throws IOException{
        File f = new File("C:\\Users\\别欺负小白了好咩\\Desktop\\Libra_diary.txt");

        OutputStream out = new FileOutputStream(f,true); // 实例化文件输出流对象,这里需要传入一个File类对象,true参数是为了让其能够在文件末尾追加而不是覆盖掉

        String str = "\r\nThis is Libra's diary."; // 要写的字符串内容
        byte b[] = str.getBytes(); // 因为OutputStream只能输出byte数组,所以这里用字符串自带的方法转型

        out.write(b); // 开始输出
        out.close(); // 关闭流,节省内存,回收空间
    }
}

/*
    1.字节输出流可以如实例所示输出内容
    2.一般来讲我们的IO流程是,打开一个文件,指定输出位置,开始读/写操作,关闭,结束
    3.以上实例如果我们将实例化文件输出流对象的true参数缺省的话,运行多次会发现,只写了一句话,这是因为输出位置一直都是最开始,也就是重复执行会覆盖掉先前的内容,所以我们需要添加上true,但具体看需求而定
    4.这个代码内没有使用try catch 是因为之前就有throws关键字抛出异常,如果不写的话,我们需要写一定数量的try catch语句
    5.OutputStream 实现了两个接口,分别是Closeable和flushable,具体可以查阅官方文档了解
 */

字符输出流

package Demo04;

import java.io.*;

public class IODemo06 {

    public static void main(String[] args) throws IOException{
        File f = new File("C:\\Users\\别欺负小白了好咩\\Desktop\\Libra_diary.txt");

        Writer out = new FileWriter(f,true); // 实例化字符输出流对象
        Reader reader = new FileReader(f); // 实例化字符输入流对象

        String str = "\r\nThis is Libra's diary."; // 要写的字符串内容

        int len = 0;
        char c[] = new char[1024];
        int temp = 0;
        while((temp = reader.read()) != -1){
            c[len] = (char)temp;
            len++;
        }

        out.write(str); // 开始输出
        out.close(); // 关闭流,节省内存,回收空间
        reader.close();  // 关闭流
        System.out.println("文件内容为:" + new String(c,0,len)); // 输出文件内容,这样验证就不用打开文件,只需要查看控制台即可
    }
}

/*
    1.字符输出流可以如实例所示输出内容,字符输入流也是如此
    2.不用转成byte数组是因为这个输出流本身就是字符输出流,不需要转型
    3.在Writer类中,除了与FileOutputStream一样实现了Closeable和Flushable两个接口以外,还多实现了一个Appendable接口,具体可参照文档了解
    4.因为read()这个方法如果读到结尾会返回-1,那么只需要判断是否读到-1就可以知道其读到结尾没有,循环读取好处是在事先不知道文件大小的情况下读取
    5.如果需要用到其他方法或者事先知道文件大小或者是用f.length()该方法来获取了文件大小,可以使用直接读取的方法
    4.其余与上节基本一致,不再赘述
 */

小结

​ 在学习了字节流和字符流之后,我们会发现,两者使用起来很像,差别不大,那么,我们在开发中,应该使用哪一种呢?
​ 有人会说,要使用字符流,因为字符流在输出的时候,不需要转成byte数组,会节省内存空间
​ 但这个时候,要知道的是,我们应该更加首选字节流,是因为字节流是直接操作文件本身,而字符流则是会先将内容推到缓冲区,通过缓冲区再操作文件
​ 为什么这么说呢,我们看代码
​ File f = new File(“C:\Users\别欺负小白了好咩\Desktop\Libra_diary.txt”);
​ OutputStream out = new FileOutputStream(f);
​ String str = “This is Libra’s diary.”;
​ byte b[] = str.getBytes();
​ out.write(b);
​ 这里没有关闭输出流
​ //out.close();

​ 当我们执行完代码后,查看文件会发现文件内有写入
​ 而字符流不关闭输出流则没有
​ 其在没关闭输出流的时候,内容在缓冲区,只有当关闭以后,才会强制推送缓冲区的内容到文件中
​ 如果想要在不关闭输出流的情况下,推送缓冲区的内容的话,就需要用到flush()了,这个方法可以强制推送缓冲区里的内容,具体的可以自己动手试验一下

最后

我是Libra,一位一直追求平等公正的学习者

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值