转载自   Jdk8一行代码读取文件

  JDK7中引入了新的文件操作类java.nio.file.File,它包含了很多有用的方法来操作文件,比如检查文件是否为隐藏文件,或者是检查文件是否为只读文件。开发者还可以使用Files.readAllBytes(Path)方法把整个文件读入内存,此方法返回一个字节数组,还可以把结果传递给String的构造器,以便创建字符串输出。

  此方法确保了当读入文件的所有字节内容时,文件属性是关闭的,否则就会出现IO异常或其它的未检查异常。这意味着在读文件到最后的块内容后,无需关闭文件。要注意,此方法不适合读取很大的文件,因为可能存在内存空间不足的问题。开发者还应该明确规定文件的字符编码,以避免任异常或解析错误。

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

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,那么一行代码即可完成读文件。

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编码。如下:

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);}
}

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错误。

Jdk8一行代码读取文件相关推荐

  1. python代码读取文件并将文件反序存入另外一个文件

    python代码读取文件并将文件反序存入另外一个文件 #data[::-1] 实现了反转(reverse) #python代码读取文件并将文件反序存入另外一个文件 # Open the file in ...

  2. 2021-02-08【Web作业开发记录】Java代码读取文件问题

    [Web作业开发记录]Java代码读取文件问题 1.问题分析 在项目中需要读取properties文件,而对于gradle项目,在java文件夹底下的properties文件在编译打包时会自动忽略,最 ...

  3. python读取文件第一行_python读取文件首行和最后一行

    python读取文件最后一行两种方式 1)常规方法:从前往后依次读取 步骤:open打开文件. 读取文件,把文件所有行读入内存. 遍历所有行,提取指定行的数据. 优点:简单,方便 缺点:当文件大了以后 ...

  4. Springboot 一行代码实现文件上传 20个平台、少写代码到极致

    又是做好人好事的一天,有个小可爱私下问我有没有好用的springboot文件上传工具,这不巧了嘛,正好我私藏了一个好东西,顺便给小伙伴们也分享一下,demo地址放在文末了. 文件上传在平常不过的一个功 ...

  5. python读取指定行到最后一行_python读取文件最后一行两种方法

    原博文 2018-09-27 13:58 − 1)常规方法:从前往后依次读取 步骤:open打开文件. ... 相关推荐 2019-09-28 21:13 − Python python是一种跨平台的 ...

  6. php代码加文件后缀,php中一行代码获取文件后缀名

    ...quot; 在字符串中最后一次出现的位置:<?php echo strrpos("I love php, I love php too!","php" ...

  7. python读取文件第n行-python读取文件第n行

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. pos = pos - 1 try: f.seek(pos, 2) #从 ...

  8. java 快速读文件_java快速读取文件

    如何优雅读取文件,java想简单读写一个文件都要上10行代码.幸好guava和apache commons 都有提供简单操作文件工具. 简单介绍读取文件最后一行.读取文件第一行.读取大文件.往大文件追 ...

  9. python将文件另存为,python读取文件另存为

    解决 python 读取文件乱码问题(UnicodeDecodeError) 解决 python 读取文件乱码问题(UnicodeDecodeError) 确定你的文件的编码,下面的代码将以'utf- ...

最新文章

  1. #51CTO学院四周年# 成长路上的我和你
  2. Android中的常见布局
  3. yolov3-tf2 数据格式压缩
  4. Vue.js-Day09【项目实战(附带 完整项目源码)-day04:用户个人中心页面、用户登录页面、将项目打包部署到服务器上、项目汇报、实训心得】
  5. JAVAEE框架之Spring新注解
  6. 怎么才能把项目做烂?!
  7. Spring MVC – Flash属性
  8. 大佬(概率期望DP)
  9. JavaScript学习总结(10)——实用JS代码大全
  10. Java 设计模式 --- Builder模式 Java Builder 模式
  11. 为Linux的ibus添加五笔98输入法
  12. SOC 时钟源PLL锁相环详细介绍——IC设计时序逻辑的灵魂
  13. via浏览器云同步国内服务器网页,Via浏览器
  14. mt4 谐波_谐波原理看美元指数:短期看涨鲨鱼或令多头重获优势!
  15. Hdu 4193 Non-negative Partial Sums (数据结构_单调队列)
  16. 用WPF做报表控件(四)
  17. 手用计算机电池,MacBook 篇一:二手MacBook pro 2017上手+换电池体验
  18. 艾永亮超级产品:不知道怎么做产品?看完这篇文章了解你的产品
  19. 哈希(Hash)算法,用哈希表进行查找
  20. pyqt5制作翻译软件+爬虫

热门文章

  1. php 如何生成二级目录json,使用PHP根据已解码的JSON创建文件夹/文件结构
  2. word List35
  3. 2 未匹配到任何借口_拼多多【关键词精确匹配溢价】给你想要的精准流量,让你订单暴增的秘诀...
  4. 经典排序算法(11)——计数排序算法详解
  5. solverstate的使用
  6. [CQOI2015]选数(杜教筛)
  7. 多项式全家桶学习笔记【持续更新】
  8. 牛客题霸 [顺时针旋转矩阵] C++题解/答案
  9. 不止代码:洛谷P1064 金明的预算方案+P2014选课(依赖背包)
  10. AT2070-[ARC061D]3人でカードゲーム/Card Game for Three【计数,组合数学】