JDK7 แนะนำคลาสการทำงานไฟล์ใหม่ Java.nio.File.File ซึ่งมีวิธีการที่มีประโยชน์มากมายในการจัดการไฟล์เช่นการตรวจสอบว่าไฟล์นั้นเป็นไฟล์ที่ซ่อนอยู่หรือตรวจสอบว่าไฟล์นั้นเป็นไฟล์อ่านอย่างเดียวหรือไม่ นักพัฒนายังสามารถใช้วิธีการ files.readallbytes (path) เพื่ออ่านไฟล์ทั้งหมดลงในหน่วยความจำ วิธีนี้ทำให้มั่นใจได้ว่าเมื่ออ่านเนื้อหาไบต์ทั้งหมดของไฟล์แล้วแอตทริบิวต์ไฟล์จะถูกปิดมิฉะนั้นจะมีข้อยกเว้น IO หรือข้อยกเว้นที่ไม่ได้ตรวจสอบอื่น ๆ จะเกิดขึ้น ซึ่งหมายความว่าหลังจากอ่านไฟล์ไปยังเนื้อหาบล็อกล่าสุดไม่จำเป็นต้องปิดไฟล์
โปรดทราบว่าวิธีนี้ไม่เหมาะสำหรับการอ่านไฟล์ขนาดใหญ่เนื่องจากอาจมีพื้นที่หน่วยความจำไม่เพียงพอ นักพัฒนาควรระบุการเข้ารหัสอักขระของไฟล์เพื่อหลีกเลี่ยงข้อยกเว้นหรือข้อผิดพลาดในการแยกวิเคราะห์
หากคุณต้องการอ่านไฟล์เป็นสตริงคุณยังสามารถใช้วิธี readAllines (พา ธ พา ธ , Charset CS) ซึ่งคล้ายกับวิธีก่อนหน้าและไม่จำเป็นต้องปิดไฟล์หลังจากอ่านไฟล์ แต่มันกลับมาไม่ได้เป็นอาร์เรย์ไบต์ แต่เป็นสายของสตริง ยิ่งไปกว่านั้น Java8 แทนที่วิธีนี้โดยไม่ระบุชุดอักขระโดยตรงโดยใช้การเข้ารหัส UTF-8 สำหรับการแปลงสตริง
หากคุณต้องการอ่านไฟล์เป็นบรรทัดสตริงทีละบรรทัดคุณสามารถใช้เมธอด files.lines () ซึ่งส่งคืนสตริงสตรีมจากไฟล์อ่านและแปลงไบต์เป็นอักขระโดยใช้การเข้ารหัส UTF-8 การใช้เมธอด foreach () คุณสามารถใช้รหัส Java เพียงบรรทัดเดียวเพื่อส่งออกเนื้อหาทั้งหมดของไฟล์ไปยังคอนโซลเช่นรหัสตัวอย่างที่สามด้านล่าง
การคัดลอกรหัสมีดังนี้:
นำเข้า java.io.ioException;
นำเข้า java.nio.charset.standardcharsets;
นำเข้า java.nio.file.files;
นำเข้า java.nio.file.Paths;
นำเข้า java.util.list;
ชั้นเรียนสาธารณะ filereadingtest {
โมฆะคงที่สาธารณะหลัก (String [] args) พ่น IOException {
// Java 7 ตัวอย่าง
// files.readallbytes อ่านไฟล์ในการเข้ารหัส UTF-8 โดยค่าเริ่มต้น
System.out.println (สตริงใหม่ (files.readallbytes (paths.get ("d: //jd.txt"))));
// 8 ตัวอย่างของ Java
รายการ <String> lines = files.ReadallLine (paths.get ("d: //jd.txt"), StandardCharSets.UTF_8);
StringBuilder sb = new StringBuilder ();
สำหรับ (สายสตริง: บรรทัด) {
sb.append (บรรทัด);
-
สตริงจากไฟล์ = sb.toString ();
System.out.println (FromFile);
-
-
หากคุณไม่ได้ใช้ JDK7 แต่ JDK8 รหัสหนึ่งบรรทัดสามารถอ่านไฟล์ได้
การคัดลอกรหัสมีดังนี้:
นำเข้า Java.lang.System.OUT;
นำเข้า Java.nio.file.files.ReadallBytes;
นำเข้า Java.nio.File.Paths.get;
นำเข้า java.io.ioException;
FileIntostring คลาสสาธารณะ {
โมฆะคงที่สาธารณะหลัก (String [] args) พ่น IOException {
// หนึ่งบรรทัดของรหัสสามารถใช้ในการอ่านไฟล์ค่าเริ่มต้นคือการเข้ารหัส UTF-8
out.println (สตริงใหม่ (readallbytes (รับ ("d:/jd.txt"))));
-
-
หากคุณใช้ JDK8 คุณสามารถใช้สตรีมมิ่ง API เพื่ออ่านและเขียนไฟล์เพื่อให้รหัสมีความกระชับและมีประสิทธิภาพมากขึ้น
ในตัวอย่างต่อไปนี้เมธอด lines () ส่งคืนสตรีมสตริงและสตริงใช้การเข้ารหัส UTF-8 ดังนี้:
การคัดลอกรหัสมีดังนี้:
นำเข้า java.io.ioException;
นำเข้า java.nio.charset.standardcharsets;
นำเข้า java.nio.file.files;
นำเข้า java.nio.file.Paths;
คลาสสาธารณะ Java8FileReader {
โมฆะคงที่สาธารณะหลัก (String [] args) พ่น IOException {
// Java 8 ใช้สตรีมมิ่งเพื่ออ่านไฟล์ซึ่งมีประสิทธิภาพมากขึ้น
files.lines (paths.get ("d: //jd.txt"), StandardCharsets.UTF_8) .Foreach (System.out :: Println);
-
-
จุดที่ควรทราบในตัวอย่างข้างต้น:
1) ไฟล์อาจมีขนาดใหญ่และอาจเกินพื้นที่หน่วยความจำ
2) ในการส่งออกบันทึกให้บันทึกว่าทำไมไฟล์ไม่สามารถอ่านได้หรือข้อผิดพลาดใด ๆ ที่พบในขณะที่อ่านไฟล์
3) เมื่อแปลงไบต์เป็นอักขระควรระบุการเข้ารหัสอักขระ
4) เพื่อจัดการกับสถานการณ์ที่ไม่มีไฟล์
โปรดทราบว่าหากรหัสของไฟล์อ่านคือการเข้ารหัส ANSI ตัวอย่างข้างต้นจะรายงาน java.nio.charset.malformedInputexception: ความยาวอินพุต = 1 ข้อผิดพลาดเมื่ออ่านเนื้อหาไฟล์