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?