栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JDK1.7 之java.nio.file.Files 读取文件仅需一行代码实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JDK1.7 之java.nio.file.Files 读取文件仅需一行代码实现

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

readAllBytes(Path)方法的源码:

  
  public static byte[] readAllBytes(Path path) throws IOException { 
    try (SeekableByteChannel sbc = Files.newByteChannel(path); 
InputStream in = Channels.newInputStream(sbc)) {//JDK1.7 try-with-resource 
      long size = sbc.size(); 
      if (size > (long)MAX_BUFFER_SIZE) 
 throw new OutOfMemoryError("Required array size too large"); 
 
      return read(in, (int)size); 
    } 
  } 

读取文件只要一行

package entryNIO; 
 
import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
 
public class BufferAndChannel { 
  public static void main(String[] args) { 
    try { 
 System.out.println( 
  new String(Files.readAllBytes(Paths.get("C:\FileChannelImpl.java"))) 
 ); 

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

readAllLines方法的源码

public static List readAllLines(Path path, Charset cs) throws IOException { 
    try (BufferedReader reader = newBufferedReader(path, cs)) { 
      List result = new ArrayList<>(); 
      for (;;) { 
 String line = reader.readLine(); 
 if (line == null) 
   break; 
 result.add(line); 
      } 
      return result; 
    } 
  } 
package entryNIO; 
 
import java.util.List; 
import java.io.IOException; 
import java.nio.charset.StandardCharsets; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
 
public class BufferAndChannel { 
  public static void main(String[] args) { 
    //如果是文本文件也可以这么读 调用readAllLines 方法 
    try { //JDK1.8以后可以省略第二个参数,默认是UTF-8编码 
      List lines = Files.readAllLines(Paths.get("C:\FileChannelImpl.java"), StandardCharsets.UTF_8); 
      StringBuilder sb = new StringBuilder(); 
      for (String line : lines) { 
 sb.append(line+"n");// rn 换行符 
      } 
      String fromFile = sb.toString(); 
      System.out.println(fromFile); 
 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
} 

使用Java8 流的方式:

先看源码实现

public static Stream lines(Path path) throws IOException { 
    return lines(path, StandardCharsets.UTF_8); 
  } 
package entryNIO; 
 
import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
 
public class BufferAndChannel { 
  public static void main(String[] args) { 
    //Java8 新增lines方法 
    try { 
// Java8用流的方式读文件,更加高效  
      Files.lines(Paths.get("C:\FileChannelImpl.java")).forEach(System.out::println);  
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
} 

读文件一行写文件也只需要一行

package entryNIO; 
 
import java.util.Arrays; 
import java.util.List; 
import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.nio.file.StandardOpenOption; 
public class BufferAndChannel { 
  public static void main(String[] args){ 
    //Java8 新增lines方法 
    String filePath="C:\FileChannelImpl.java"; 
    try { 
// Java8用流的方式读文件,更加高效  
       

       
      List stringStream=Files.readAllLines(Paths.get(filePath)); 
      //因为Files.lines(Path path)返回的是Stream,所以可以通过下面这种方法变成List 
      //List stringStream2=Arrays.asList((String[])Files.lines(Paths.get(filePath)).toArray()); 

      //StandardOpenOption为枚举类 ,如果当前所Paths.get()的文件不存在,第三个参数可选择StandardOpenOption.CREATE_NEW 
      //文件存在则抛java.nio.file.FileAlreadyExistsException异常 
      Files.write(Paths.get("C:\2.java"), stringStream, StandardOpenOption.CREATE_NEW); 
  
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
} 

以上这篇JDK1.7 之java.nio.file.Files 读取文件仅需一行代码实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/142944.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号