"โอ้ฤๅษี! สวัสดี!"

"สวัสดี Amigo ชีวิตเป็นอย่างไรบ้าง"

"เยี่ยมมาก Bilaabo เพิ่งบอกฉันเกี่ยวกับสิ่งที่น่าสนใจมากมายเกี่ยวกับ File และวิธีการทำงานกับมัน"

"เมื่อมันเกิดขึ้น ฉันคิดว่าฉันมีบางอย่างที่จะเพิ่มในหัวข้อนี้"

“จริงเหรอ งั้นฉันก็หูฝาดไปแล้วล่ะ”

"เอาล่ะ ฟังไว้ Java มีการพัฒนาอย่างต่อเนื่อง นักพัฒนามองหาวิธีใหม่ๆ ในการทำสิ่งต่างๆ อย่างมีประสิทธิภาพมากขึ้นอย่างต่อเนื่อง ใน Java 7 พวกเขาได้เพิ่มทางเลือกให้กับคลาส File"

ไฟล์ เส้นทาง - 1

"ทางเลือก?"

"ใช่ พวกเขาใช้ คลาส File เป็นพื้นฐาน เพิ่มสิ่งใหม่ๆ เปลี่ยนชื่อเมธอด แล้วแยกมัน ออก  เป็นสองคลาส ตอนนี้มีคลาสใหม่สองคลาส: PathและFiles จริงๆ แล้ว Pathเป็นอะนาล็อกใหม่ของ File class และFileเป็นคลาสยูทิลิตี้ (คล้ายกับคลาส Arrays และ Collections) เมธอดสแตติกทั้งหมดของคลาส File ไปที่นั่น การทำเช่นนี้ 'ถูกต้องกว่า' ในแง่ของ OOP"

"ถ้าเป็นในแง่ของ OOP ก็โอเค แล้วมีอะไรเปลี่ยนไปบ้าง"

"อย่างแรก พวกเขาตัดสินใจที่จะไม่สร้างเมธอดที่ส่งคืน  วัตถุString  และFileใน คลาส Path  ทุกเมธอดจะคืนค่าเป็นPath

"ประการที่สอง พวกเขาย้ายเมธอดยูทิลิตี้แบบคงที่จำนวนมากไปยัง คลาส Files "

"ประการที่สาม การทำงานกับเส้นทางสัมพัทธ์สะดวกยิ่งขึ้น"

"นี่คือรายการของวิธีการ:"

เมธอดของคลาส Path คำอธิบาย
boolean isAbsolute() คืนค่าจริงหากเส้นทางเป็นแบบสัมบูรณ์
Path getRoot() ส่งกลับรากของเส้นทางปัจจุบัน นั่นคือไดเร็กทอรีบนสุด
Path getFileName() ส่งกลับชื่อไฟล์จากเส้นทางปัจจุบัน
Path getParent() ส่งกลับไดเร็กทอรีจากเส้นทางปัจจุบัน
boolean startsWith(Path other) ตรวจสอบว่าเส้นทางปัจจุบันเริ่มต้นด้วยเส้นทางที่ผ่านหรือไม่
boolean endsWith(Path other) ตรวจสอบว่าเส้นทางปัจจุบันลงท้ายด้วยเส้นทางที่ผ่านหรือไม่
Path normalize() ปรับเส้นทางปัจจุบันให้เป็นมาตรฐาน ตัวอย่างเช่น แปลง «c:/dir/dir2/../a.txt» เป็น «c:/dir/a.txt»
Path relativize(Path other) คำนวณเส้นทางสัมพัทธ์ของสองเส้นทาง นั่นคือ «ความแตกต่างระหว่างเส้นทาง»
Path resolve(String other) แก้ไขเส้นทางสัมบูรณ์โดยใช้เส้นทางปัจจุบันและเส้นทางสัมพัทธ์
URI toUri() ส่งกลับ URI ถ้าเส้นทาง/ไฟล์ปัจจุบัน
Path toAbsolutePath() แปลงพาธเป็นพาธสัมบูรณ์หากเป็นพาธสัมพัทธ์
File toFile() ส่งกลับวัตถุไฟล์ที่สอดคล้องกับวัตถุเส้นทางปัจจุบัน

"และเส้นทางปัจจุบัน—นั่นคืออะไร"

"นี่คือเส้นทางที่ส่งผ่านไปยังตัวสร้างของวัตถุเส้นทางซึ่งมีการเรียกใช้เมธอด"

"ตกลง แล้ว คลาส Filesมีเมธอดอะไรบ้าง"

"คุณกำลังรีบไปที่ไหนสักแห่ง? ฉันจะบอกคุณตอนนี้ วิธีที่สำคัญที่สุดมีดังนี้:"

เมธอดของคลาส Files คำอธิบาย
Path createFile(…) สร้างไฟล์บนดิสก์
Path createDirectory(…) สร้างไดเร็กทอรี
Path createDirectories(…) สร้างไดเร็กทอรีและไดเร็กทอรีย่อยทั้งหมด
Path createTempFile(…) สร้างไฟล์ชั่วคราว
Path createTempDirectory(…) สร้างไดเร็กทอรีชั่วคราว
void delete(Path path) ลบไฟล์
Path copy(Path source, Path target,…) คัดลอกไฟล์
Path move(Path source, Path target,…) ย้ายไฟล์
boolean isSameFile(Path, Path) เปรียบเทียบสองไฟล์
boolean isDirectory(Path) เส้นทางเป็นไดเร็กทอรีหรือไม่
boolean isRegularFile(Path) เส้นทางเป็นไฟล์หรือไม่
long size(Path) ส่งกลับขนาดไฟล์
boolean exists(Path) มีวัตถุที่มีชื่อเดียวกันหรือไม่?
boolean notExists(Path) ไม่มีวัตถุที่มีชื่อเดียวกันหรือไม่
long copy(InputStream, OutputStream) คัดลอกไบต์จาก InputStream ไปยัง OutputStream
long copy(Path, OutputStream) คัดลอกไบต์ทั้งหมดจากเส้นทางไปยัง OutputStream
long copy(InputStream, Path) คัดลอกไบต์ทั้งหมดจาก InputStream ไปยังเส้นทาง
byte[] read(InputStream, int initialSize) อ่านอาร์เรย์ของไบต์จาก InputStream
byte[] readAllBytes(Path path) อ่านไบต์ทั้งหมดจาก InputStream
List<String> readAllLines(Path path,..) อ่านไฟล์ข้อความและส่งคืนรายการสตริง
Path write(Path path, byte[] bytes,…) เขียนอาร์เรย์ของไบต์ลงในไฟล์

"น่าสนใจยังไงล่ะ! ฟังก์ชั่นเจ๋งๆ เพียบ รวมไว้ในที่เดียวกัน"

"ดูสิ สมมติว่าคุณต้องการดาวน์โหลดไฟล์จากอินเทอร์เน็ตแล้วส่งให้คนอื่น ในการทำเช่นนี้ การสร้างไฟล์ชั่วคราวบนดิสก์จะสะดวกมาก และบันทึกข้อมูลที่อ่านได้"

"ดาวน์โหลดไฟล์จากอินเทอร์เน็ตยากไหม"

"มันง่ายมาก ดูตัวอย่างนี้:"

รหัส
URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png");
InputStream inputStream = url.openStream();

Path tempFile = Files.createTempFile("temp-",".tmp");
Files.copy(inputStream, tempFile);

"แล้วมันคืออะไร?"

"ใช่ สิ่งที่คุณคาดว่าจะเห็น มีแค่ 4 บรรทัด"

" บรรทัดที่ 1  สร้างวัตถุ URL ที่ส่ง URL ของไฟล์ภาพ

" บรรทัดที่ 2  สตรีมสำหรับอ่านไฟล์ (InputStream) เปิดขึ้นบนวัตถุ url

" บรรทัดที่ 3 เมธอด  นี้createTempFileใช้เพื่อสร้างไฟล์ชั่วคราว

" บรรทัดที่ 4  เมธอด Files.copy คัดลอกข้อมูลจาก  inputStream to tempFileแค่นั้นแหละ"

"ฉลาดหลักแหลม!"

“เยี่ยมมาก ฉันดีใจที่คุณชอบ ฉันคิดว่าคุณคงหาวิธีที่เหลือได้เอง และฉันจะขอให้ดิเอโกทำงานหลายอย่างเกี่ยวกับพวกเขา”

"ยังไงก็ตาม นี่คือลิงค์ ที่ดี เกี่ยวกับเนื้อหานี้"