91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JDK1.7中java.nio.file.Files如何讀取文件

發布時間:2021-07-26 10:42:23 來源:億速云 閱讀:150 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關JDK1.7中java.nio.file.Files如何讀取文件的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

JDK1.7中引入了新的文件操作類java.nio.file這個包,其中有個Files類它包含了很多有用的方法來操作文件,比如檢查文件是否為隱藏文件,或者是檢查文件是否為只讀文件。開發者還可以使用Files.readAllBytes(Path)方法把整個文件讀入內存,此方法返回一個字節數組,還可以把結果傳遞給String的構造器,以便創建字符串輸出。此方法確保了當讀入文件的所有字節內容時,無論是否出現IO異常或其它的未檢查異常,資源都會關閉。這意味著在讀文件到最后的塊內容后,無需關閉文件。要注意,此方法不適合讀取很大的文件,因為可能存在內存空間不足的問題。開發者還應該明確規定文件的字符編碼,以避免任異常或解析錯誤。

readAllBytes(Path)方法的源碼:

<span > </span><span >/** 
 * Reads all the bytes from a file. The method ensures that the file is 
 * closed when all bytes have been read or an I/O error, or other runtime 
 * exception, is thrown. 
 * 注意該方法只適用于簡單的情況,這種簡單的情況能夠很方便地將所有的字節讀進一個字節數組,但并不適合用來讀取大文件 
 * <p> Note that this method is intended for simple cases where it is 
 * convenient to read all bytes into a byte array. It is not intended for 
 * reading in large files. 
 * 
 * @param  path 
 *     the path to the file 
 * 
 * @return a byte array containing the bytes read from the file 
 * 
 * @throws IOException 
 *     if an I/O error occurs reading from the stream 
 *     如果大于文件2G,將拋出內存溢出異常 
 * @throws OutOfMemoryError 
 *     if an array of the required size cannot be allocated, for 
 *     example the file is larger that {@code 2GB} 
 * @throws SecurityException 
 *     In the case of the default provider, and a security manager is 
 *     installed, the {@link SecurityManager#checkRead(String) checkRead} 
 *     method is invoked to check read access to the file. 
 */</span><span > 
  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); 
    } 
  }</span>

讀取文件只要一行

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<String> readAllLines(Path path, Charset cs) throws IOException { 
    try (BufferedReader reader = newBufferedReader(path, cs)) { 
      List<String> 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 {<span >               </span>//JDK1.8以后可以省略第二個參數,默認是UTF-8編碼 
      List<String> lines = Files.readAllLines(Paths.get("C:\\FileChannelImpl.java"), StandardCharsets.UTF_8); 
      StringBuilder sb = new StringBuilder(); 
      for (String line : lines) { 
        sb.append(line+"\n");// \r\n 換行符 
      } 
      String fromFile = sb.toString(); 
      System.out.println(fromFile); 
 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
}

使用Java8 流的方式:

先看源碼實現

public static Stream<String> 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(<span >"C:\\FileChannelImpl.java"</span>)).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用流的方式讀文件,更加高效  
      /*Files.lines(Paths.get(filePath)).forEach((line)->{ 
          try { 
            Files.write(Paths.get("\\1.java"), line.getBytes(), StandardOpenOption.APPEND); 
            //Files.copy(in, target, options); 
          } catch (IOException e) { 
            e.printStackTrace(); 
          } 
         
      }); */ 
       
      /* Files.readAllLines(Path path)方法返回值為List<String>類型,就是為Files.write()而設計的 
       * 因為Files.write()需要傳入一個Iterable<? extends CharSequence>類型的參數 
       * 
       * Files.write(Path path, Iterable<? extends CharSequence> lines, OpenOption... options) 
       */ 
      List<String> stringStream=Files.readAllLines(Paths.get(filePath)); 
      //因為Files.lines(Path path)返回的是Stream<String>,所以可以通過下面這種方法變成List<String> 
      //List<String> 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如何讀取文件”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴国县| 静海县| 日照市| 杭锦后旗| 牟定县| 方山县| 沁源县| 长子县| 济宁市| 灯塔市| 隆林| 潜山县| 通渭县| 邳州市| 宜宾市| 台东市| 光泽县| 西吉县| 旌德县| 犍为县| 黔西县| 合作市| 通化市| 伊川县| 丰城市| 泗水县| 青阳县| 临清市| 海门市| 大宁县| 永年县| 嘉义市| 安化县| 忻城县| 山阳县| 古丈县| 绍兴县| 枣阳市| 云林县| 镇平县| 区。|