Java NIO - ไฟล์

แพ็คเกจ Java NIO มี API ยูทิลิตี้อีกหนึ่งตัวที่มีชื่อว่าไฟล์ซึ่งโดยพื้นฐานแล้วจะใช้สำหรับการจัดการไฟล์และไดเร็กทอรีโดยใช้วิธีการแบบคงที่ซึ่งส่วนใหญ่ทำงานบนออบเจ็กต์ Path

ตามที่กล่าวไว้ในบทช่วยสอน Path ว่าอินเทอร์เฟซ Path ถูกนำมาใช้ในแพ็คเกจ Java NIO ระหว่างเวอร์ชัน Java 7 ในแพ็คเกจไฟล์ดังนั้นบทช่วยสอนนี้จึงใช้สำหรับแพ็คเกจไฟล์เดียวกัน

คลาสนี้ประกอบด้วยเมธอดแบบคงที่ที่ดำเนินการกับไฟล์ไดเร็กทอรีหรือไฟล์ประเภทอื่น ๆ เท่านั้นในกรณีส่วนใหญ่เมธอดที่กำหนดไว้ที่นี่จะมอบสิทธิ์ให้กับผู้ให้บริการระบบไฟล์ที่เกี่ยวข้องเพื่อดำเนินการกับไฟล์

มีวิธีการมากมายที่กำหนดไว้ในคลาสไฟล์ซึ่งสามารถอ่านได้จากเอกสาร Java ในบทช่วยสอนนี้เราได้พยายามครอบคลุมวิธีการที่สำคัญบางอย่างจากวิธีการทั้งหมดของคลาส Java NIO Files

วิธีการที่สำคัญของคลาสไฟล์

ต่อไปนี้เป็นวิธีการสำคัญที่กำหนดไว้ในคลาส Java NIO Files

  • createFile(Path filePath, FileAttribute attrs) - คลาสไฟล์จัดเตรียมวิธีนี้เพื่อสร้างไฟล์โดยใช้ Path ที่ระบุ

ตัวอย่าง

package com.java.nio;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class CreateFile {
   public static void main(String[] args) {
      //initialize Path object
      Path path = Paths.get("D:file.txt");
      //create file
      try {
         Path createdFilePath = Files.createFile(path);
         System.out.println("Created a file at : "+createdFilePath);
      } 
      catch (IOException e) {
         e.printStackTrace();
      }
   }
}

เอาต์พุต

Created a file at : D:\data\file.txt
  • copy(InputStream in, Path target, CopyOption… options) - วิธีนี้ใช้เพื่อคัดลอกไบต์ทั้งหมดจากอินพุตสตรีมที่ระบุไปยังไฟล์เป้าหมายที่ระบุและส่งคืนจำนวนไบต์ที่อ่านหรือเขียนเป็นค่าแบบยาว LinkOption สำหรับพารามิเตอร์นี้พร้อมค่าต่อไปนี้ -

    • COPY_ATTRIBUTES - คัดลอกแอตทริบิวต์ไปยังไฟล์ใหม่เช่นแอตทริบิวต์เวลาแก้ไขล่าสุด

    • REPLACE_EXISTING - แทนที่ไฟล์ที่มีอยู่หากมีอยู่

    • NOFOLLOW_LINKS - หากไฟล์เป็นลิงก์สัญลักษณ์ระบบจะคัดลอกลิงก์นั้นเองไม่ใช่เป้าหมายของลิงก์

ตัวอย่าง

package com.java.nio;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.List;
public class WriteFile {
   public static void main(String[] args) {
      Path sourceFile = Paths.get("D:file.txt");
      Path targetFile = Paths.get("D:fileCopy.txt");
      try {
         Files.copy(sourceFile, targetFile,
         StandardCopyOption.REPLACE_EXISTING);
      }
      catch (IOException ex) {
         System.err.format("I/O Error when copying file");
      }
      Path wiki_path = Paths.get("D:fileCopy.txt");
      Charset charset = Charset.forName("ISO-8859-1");
      try {
         List<String> lines = Files.readAllLines(wiki_path, charset);
         for (String line : lines) {
            System.out.println(line);
         }
      } 
      catch (IOException e) {
         System.out.println(e);
      }
   }	
}

เอาต์พุต

To be or not to be?
  • createDirectories(Path dir, FileAttribute<?>...attrs) - วิธีนี้ใช้ในการสร้างไดเร็กทอรีโดยใช้พา ธ ที่กำหนดโดยการสร้างไดเร็กทอรีหลักที่ไม่มีอยู่ทั้งหมด

  • delete(Path path) - วิธีนี้ใช้เพื่อลบไฟล์จากพา ธ ที่ระบุโดยจะพ่น NoSuchFileException หากไฟล์ไม่มีอยู่ในพา ธ ที่ระบุหรือหากไฟล์เป็นไดเร็กทอรีและไฟล์อาจไม่ว่างเปล่าและไม่สามารถลบได้

  • exists(Path path) - วิธีนี้ใช้เพื่อตรวจสอบว่าไฟล์มีอยู่ในเส้นทางที่ระบุหรือไม่และหากมีไฟล์อยู่ไฟล์นั้นจะส่งคืนจริงหรือมิฉะนั้นจะส่งคืนเท็จ

  • readAllBytes(Path path) - วิธีนี้ใช้เพื่ออ่านไบต์ทั้งหมดจากไฟล์ในพา ธ ที่กำหนดและส่งคืนอาร์เรย์ไบต์ที่มีไบต์ที่อ่านจากไฟล์

ตัวอย่าง

package com.java.nio;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class ReadFile {
   public static void main(String[] args) {
      Path wiki_path = Paths.get("D:file.txt");
      Charset charset = Charset.forName("ISO-8859-1");
      try {
         List<String> lines = Files.readAllLines(wiki_path, charset);
         for (String line : lines) {
            System.out.println(line);
         }
      } 
      catch (IOException e) {
         System.out.println(e);
      }
   }	
}

เอาต์พุต

Welcome to file.
  • size(Path path) - วิธีนี้ใช้เพื่อรับขนาดของไฟล์ตามเส้นทางที่ระบุเป็นไบต์

  • write(Path path, byte[] bytes, OpenOption… options) - วิธีนี้ใช้เพื่อเขียนไบต์ไปยังไฟล์ตามเส้นทางที่ระบุ

ตัวอย่าง

package com.java.nio;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class WriteFile {
   public static void main(String[] args) {
      Path path = Paths.get("D:file.txt");
      String question = "To be or not to be?";
      Charset charset = Charset.forName("ISO-8859-1");
      try {
         Files.write(path, question.getBytes());
         List<String> lines = Files.readAllLines(path, charset);
         for (String line : lines) {
            System.out.println(line);
         }
      } 
      catch (IOException e) {
         System.out.println(e);
      }
   }
}

เอาต์พุต

To be or not to be?