版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/44023039

Java8读文件仅需一行代码

JDK7中引入了新的文件操作类java.nio.file.File,它包含了很多有用的方法来操作文件,比如检查文件是否为隐藏文件,或者是检查文件是否为只读文件。开发者还可以使用Files.readAllBytes(Path)方法把整个文件读入内存,此方法返回一个字节数组,还可以把结果传递给String的构造器,以便创建字符串输出。此方法确保了当读入文件的所有字节内容时,文件属性是关闭的,否则就会出现IO异常或其它的未检查异常。这意味着在读文件到最后的块内容后,无需关闭文件。
要注意,此方法不适合读取很大的文件,因为可能存在内存空间不足的问题。开发者还应该明确规定文件的字符编码,以避免任异常或解析错误。

作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs

如果你想读入文件作为字符串,那么你还可以使用readAllLines(Path path, Charset cs)方法,此方法与之前的方法相似,也是在读完文件后无需关闭文件。但是它返回的不是字节数组,而是字符串数组。而且,Java8重写了此方法,无需指定字符集,直接使用UTF-8编码进行字符串转换。
如果你想一行一行的读入文件作为字符串,那么你可以使用Files.lines()方法,它会从读入的文件中返回字符串流,并使用UTF-8编码把字节转换成字符。使用forEach()方法,可以只用一行Java代码实现把文件的所有内容输出到控制台,如下面第三个代码片段。

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;public class FileReadingTest {public static void main(String[] args) throws IOException {// Java 7 例子// Files.readAllBytes默认以UTF-8编码读入文件,故文件的编码如果不是UTF-8,那么中文内容会出现乱字符System.out.println(new String(Files.readAllBytes(Paths.get("D:\\jd.txt"))));// Java 8例子List<String> lines = Files.readAllLines(Paths.get("D:\\jd.txt"), StandardCharsets.UTF_8);StringBuilder sb = new StringBuilder();for(String line : lines){sb.append(line);}String fromFile = sb.toString();System.out.println(fromFile);}
}

如果使用的不是JDK7,而是JDK8,那么一行代码即可完成读文件。

import static java.lang.System.out;
import static java.nio.file.Files.readAllBytes;
import static java.nio.file.Paths.get;import java.io.IOException;
public class FileIntoString {public static void main(String[] args) throws IOException {// 一行代码搞定读文件,默认是UTF-8编码out.println(new String(readAllBytes(get("d:/jd.txt"))));}
}

如果使用JDK8,那么还可以使用流API来读写文件,这样代码更简洁、高效。
下面的例子中,lines()方法返回字符串流,字符串使用的是UTF-8编码。如下:

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;public class Java8FileReader {public static void main(String[] args) throws IOException {// Java8用流的方式读文件,更加高效Files.lines(Paths.get("D:\\jd.txt"), StandardCharsets.UTF_8).forEach(System.out::println);}
}

上面的例子要注意几点:
1)文件可能很大,可能会超出内存空间,使用前要做评估。
2)要输出日志,记录为什么无法读取文件或者在阅读文件时遇到的任何错误。
3)在把字节转换成字符时,应该指定字符编码。
4)要处理文件不存在的情况。

还要注意,如果读入的文件的编码是ANSI编码,那么上面的例子在读取文件内容时会报java.nio.charset.MalformedInputException: Input length = 1错误。

Java8读文件仅需一行代码相关推荐

  1. Python爬虫仅需一行代码,熟练掌握crawl第三方库

    simple_crawl 仅需一行代码即可达到爬虫效果 使用方法 私信小编01即可大量获取Python学习资料 pip install simple_crawl 以下源代码为简单介绍,详细功能介绍再源 ...

  2. 基于飞桨PaddlePaddle实现素描线稿提取——仅需一行代码即可实现模型调用

    一行代码实现从彩色图提取素描线稿 一.前言:初识PaddleHub 预训练模型(Pre-Trained Models) 二.构建Module的大框架 1.将模型文件存放在infer_model下 2. ...

  3. Python爬虫仅需一行代码----crawl第三方库

    仅需一行代码写爬虫–simple_crawl simple_crawl 仅需一行代码即可达到爬虫效果 项目地址(欢迎star):https://github.com/Amiee-well/crawl ...

  4. ML之DS:仅需一行代码实现对某字段下的所有数值实现同一机制的改变或转换(比如全部转为str类型/全部取平方值)

    ML之DS:仅需一行代码实现对某字段下的所有数值实现同一机制的改变或转换(比如全部转为str类型/全部取平方值) 目录 仅需一行代码实现对某字段下的所有数值实现同一机制的改变或转换(比如全部转为str ...

  5. Python编程语言学习:仅需一行代码将字符串化的数字数组、int数组、float数组实现之间互换(将一个字符串数组转换成整型数组)

    Python编程语言学习:仅需一行代码将字符串化的数字数组.int数组.float数组实现之间互换(将一个字符串数组转换成整型数组) 目录

  6. 牛气!GitHub 标星 119K+!这些神器仅需一行代码即可下载全网视频!

    作者 | JackTian 来源 | 杰哥的IT之旅(ID:Jake_Internet) 今天这篇文章的内容对于经常浏览各大视频网站的同学来说,是一大神器工具.当你看到自己目前所需的视频时想尽各种办法 ...

  7. GitHub 标星 119K+!这些神器仅需一行代码即可下载全网视频!

    作者 | JackTian 来源 | 杰哥的IT之旅(ID:Jake_Internet) 头图 |  CSDN 下载自东方IC 大家好,我是 JackTian. 今天这篇文章的内容对于经常浏览各大视频 ...

  8. GitHub 标星 120K+!这些神器仅需一行代码即可下载全网视频!

    大家好,我是 JackTian. 今天这篇文章的内容对于经常浏览各大视频网站的同学来说,是一大神器工具.当你看到自己目前所需的视频时想尽各种办法保存至本地,方便后期再次回看.恰巧有些视频可能需要会员才 ...

  9. 【效率】GitHub 标星 119K+!这些神器仅需一行代码即可下载全网视频!

    作者 | JackTian 来源 | 杰哥的IT之旅(ID:Jake_Internet) 转载请联系授权(微信ID:Hc220066) 大家好,我是 JackTian. 今天这篇文章的内容对于经常浏览 ...

最新文章

  1. BERT拿下最佳长论文奖!NAACL 2019最佳论文奖公布
  2. 《统一沟通-微软-技巧》-20-Lync 2010如何在我的联系人列表中添加非联盟联系人...
  3. linux程序崩溃时调用链,Linux 获取并分析程序崩溃时的调用堆栈
  4. iOS 集成银联支付
  5. UI网格,提升效率,爱上做设计
  6. php的字符串操作,PHP 字符串操作
  7. Android深度探索-卷1第二章心得体会
  8. fn_dblog_如何使用fn_dblog和fn_dump_dblog直接在SQL Server数据库中连续读取事务日志文件数据
  9. php旧物交易开源代码_PHP学习笔记:php二手交易市场系统
  10. PropertyUtils嵌套属性的使用
  11. php laravel 中文手册,Laravel 5 中文手册(二):配置
  12. C. Mortal Kombat Tower(动态规划)Educational Codeforces Round 95 (Rated for Div. 2)
  13. [笔记] 当当音乐人:免费将Midi转化为WAV
  14. 名词用作动词举例_[名词的活用] 名词的活用例子
  15. cf1163B2. Cat Party (Hard Edition)(简单总结一下map数据结构的简单方法)
  16. 三种方式,实现多可系统外网访问
  17. Win10 上使用 MSYS 开发 Android NDK 程序
  18. 9.27通则康威技术面
  19. 两个数学家的问题,“你不知道我不知道你知道我知道”
  20. AIR32F103(七) AIR32F103CBT6/CCT6启用96K内存

热门文章

  1. 函数 php_PHP函数缺陷详解
  2. 南昌职高计算机录取分数线,南昌运输职业技术学校2021年招生录取分数线
  3. Java正则表达式校验工具类_【Java工具类】----正则表达式校验工具类
  4. 自动唤醒解锁电脑 bat_吉行贴士 | 一键解锁智能语音新姿势
  5. G502使用计算机配置,解决方案:Logitech G502宏设置教程方法
  6. 万能系统卸载器免root_Linux umount命令:卸载文件系统
  7. 周期信号的傅里叶变换(精彩)
  8. mpVue配置sass全局变量
  9. python基础学习-装饰器进阶
  10. MapReduce过程详细分析