嗨喽~小伙伴们我又来了,

最近有一位朋友学习了I/O流,他给我提出了这样一个问题:现在有一个简单的haha.txt文件,利用IO流将haha.txt中的所有文本复制到第二个txt文件:haha2.txt中,问有多少种方式?

I/O流是Java中一个比较重要的模块,但是jdk中与IO流有关的类比较繁多,大伙记忆起来也比较繁琐,推荐大家多敲代码,在敲代码的过程中,对记忆这些类会轻松许多。

借那位朋友的问题,我们来复习一下IO流中四种最基本的流:

第一种方式:

利用 FileInputStream 和 FileOutputStream --->>


import java.io.*;/*** @author sixibiheye* @date 2021/9/11* @apiNote "复制"文本的方式一 FileInputStream && FileOutputStream*/
public class FileInputStream$FileOutputStream {public static void main(String[] args) throws IOException {File input = new File("haha.txt");File output = new File("haha2.txt");FileInputStream fileInputStream = new FileInputStream(input);FileOutputStream fileOutputStream = new FileOutputStream(output);int c;while((c = fileInputStream.read()) != -1){fileOutputStream.write(c);}fileInputStream.close();fileOutputStream.close();}
}

上述代码需要注意的有两点:

1. haha.txt 和 haha2.txt 必须放在程序当前目录下,如果不在当前目录,需提供全局路径;

2. read() 方法会读取某一个字节并返回(返回值为整型),如果返回值为-1,则代表文件读取完毕 。

第二种方式:

利用 FileReader 和 FileWriter --->>


import java.io.*;/*** @author sixibiheye* @date 2021/9/11* @apiNote "复制"文本的方式二 FileReader && FileWriter*/
public class FileReader$FileWriter {public static void main(String[] args) throws IOException {FileReader fileReader = new FileReader("haha.txt");FileWriter fileWriter = new FileWriter("haha2.txt");int c;while((c = fileReader.read()) != -1){fileWriter.write(c);System.out.print((char) c);}fileReader.close();fileWriter.close();}
}

上述代码中添加了一句:“System.out.print((char) c);”,用于在控制台输出haha.txt中的文本内容。

第三种方式:

利用 BufferedInputStream 和 BufferedOutputStream --->>


import java.io.*;/*** @author sixibiheye* @date 2021/9/11* @apiNote "复制"文本的方式三 BufferedInputStream && BufferedOutputStream*/
public class BufferedInputStream$BufferedOutputStream {public static void main(String[] args) throws IOException {File input = new File("haha.txt");File out = new File("haha2.txt");BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(input));BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(out));int c;while((c = bufferedInputStream.read()) != -1){bufferedOutputStream.write(c);System.out.print((char) c);}bufferedInputStream.close();bufferedOutputStream.close();}
}

上述的缓冲流,把数据从原始流成块读入或把数据积累到一个大数据块后再成批写出,通过减少系统资源的读写次数来加快程序的执行。推荐使用。

第三种方式:

利用 BufferedReader 和 BufferedWriter --->>


import java.io.*;/*** @author sixibiheye* @date 2021/9/11* @apiNote "复制"文本的方式四 BufferedReader && BufferedWriter*/public class BufferedReader$BufferedWriter {public static void main(String[] args) throws IOException {File input = new File("haha.txt");File output = new File("haha2.txt");BufferedReader bufferedReader =  new BufferedReader(new InputStreamReader(new FileInputStream(input)));BufferedWriter bufferedWriter =  new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output)));String s;while((s = bufferedReader.readLine()) != null){bufferedWriter.write(s);bufferedWriter.newLine();}bufferedReader.close();bufferedWriter.close();}
}

上述的 BufferedReader 方式,在读取文本的时候多了一种方法:readLine() 用于读取一行的文本,值得注意的是,readLine() 不会读取每一行的换行符,所以在使用 BufferedWriter 进行写入的时候,JDK提供了一个 newLine() 方法用于产生一个换行符,保证我们读取文本数据的原始性。同前一种方式,BufferedReader 和 BufferedWriter 操作纯文本的效率上要比第一,二种方式高,推荐使用。

当然,IO流实现上述效果的类还有许多,这四种方式是最基本也是最原始的方式,请小伙伴们好好理解,最后,喜欢的小伙伴们点个赞鼓励支持一下吧~

你会几种“复制”文本的方式?----浅谈I/O流相关推荐

  1. 计算机机房搬迁复杂吗,中心机房搬迁的两种方式浅谈

    中心机房搬迁的两种方式浅谈 最近在处理中心机房机房搬迁的事宜,很多事情其实看起来简单,但是实现的时候总会有一些不如意的地方,很可能你考虑的是一个看起来非常稳定完美的搬迁,但是 实现中总会有这样那样的限 ...

  2. 服务器迁移的两种方式浅谈

    最近在处理服务器机房迁移的事宜,很多事情其实看起来简单,但是实现的时候总会有一些不如意的地方,很可能你考虑的是一个看起来非常稳定完美的迁移,但是实现中总会有这样那样的限制最后不得不采用一种混合式或者看 ...

  3. 分三种情况C语言编程,浅谈C语言教学的现状及几点建议.doc

    浅谈C语言教学的现状及几点建议 浅谈C语言教学的现状及几点建议 摘 要 针对C语言教学中存在的问题提出建议,以期对C语言教学有一定帮助. 关键词 C语言:课程设置:创新能力 中图分类号:G642 文献 ...

  4. python中内置的四种数值类型为_浅谈python语言四种数值类型

    Python语言支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下.希望对 ...

  5. java 复制一个数组_浅谈Java中复制数组的方式

    在Java里面,可以用复制语句"A=B"给基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组:如果一个数组发生改变,那么引用同 ...

  6. 文本分类+机器学习浅谈?

    0.引言 开门老话:如有雷同算我抄你的,私信:我就是给自己做个笔记,顺带如果能帮到别人算积德行善:文章通俗风格,难免不严谨,大家意会即可:严谨的可以去找论文推导公式看书.- 现在,随处可见的深度学习课 ...

  7. numpy的深复制与浅复制的区别_浅谈数据备份与复制对于企业用户的区别

    随着服务器海量数据的不断增长,数据的体积变得越来越庞大.同时,各种数据的安全性和重要程度也越来越被人们所重视.对数据备份的认同涉及到两个主要问题,一是为什么要备份,二是为什么要选择磁带作为备份的介质. ...

  8. 用搞笑的方式浅谈怎么做好一款产品!

    今天说一下在已有的条件下,怎么分门别类的将一款产品的每一个点想明白,怎么将一款产品做出来符合用户的口味和习惯,写一下纯属个人想法,如有不妥,还望酌情采纳! 下面是一个开发完整的流程(照顾一下那些不懂开 ...

  9. 数字货币买卖单、价格、数量计算方式浅谈

    一.场景: ①请求交易对CNY/BTC 即买卖CNY ②访问bts区块链接口get_limit_orders ③响应数据: {     "id":36,     "jso ...

最新文章

  1. 伯克利论断:Serverless 才是云时代的主宰
  2. Python 懂车帝全系车型--参数分析
  3. 36. Valid Sudoku
  4. mysql 语句 函数分析
  5. java json乱码_Java Http请求传json数据乱码问题的解决
  6. redis哨兵主从不切换_Redis的三种模式:主从、哨兵、集群
  7. rust原地复活_植物大战僵尸英雄锈铁螺栓新手卡组推荐 rustbolt多手牌陷阱恢复后期流卡组...
  8. docker xware下载慢_win7环境下Docker快速构建及阿里云容器加速配置
  9. poj1017----模拟
  10. 人脸数据集汇总(附百度云盘链接)
  11. 鲁大师2014 v3.75.14.1058 官方版
  12. r语言如何计算t分布临界值_R语言使用蒙特卡洛模拟进行正态性检验及可视化
  13. IJCAI 2021 投稿安排出来了!新审稿机制体验一下?
  14. wjw的剪纸(DFS)
  15. hibernate-validate如何校验controller+service+分组校验+自定义注解实现校验规则等
  16. 计算机网络技术用苹果电脑,苹果电脑的硬盘能接到PC机上用吗?能用硬盘 – 手机爱问...
  17. git基本命令使用大全
  18. ArcGIS 9.3下载,包含ArcGIS Desktop、ArcGIS Engine、ArcGIS Server、ArcSDE、workstation
  19. Qt中对字符串长度转换成像素长度
  20. 当一个c语言表达式中同时含有,如果在一个C语言表达式中有多个运算符,则运算时应该( )...

热门文章

  1. Data Exfiltration via Blind OS Command Injection
  2. 学习c/c++的50个好网站(转)
  3. windows 7下不能使用telnet方法
  4. 绝秘:在Excel中快速输入数据
  5. vs2005中的aspnetdb(转)
  6. jQuery插件开发(转)
  7. mysql(5.6及以下)解析json
  8. linux系统上项目部署
  9. C++灵活易错特性-02
  10. C语言博客作业---嵌套循环