jdk1.7 แนะนำแพ็คเกจการดำเนินการไฟล์ใหม่ Java.nio.File มีคลาสไฟล์ที่มีวิธีการที่มีประโยชน์มากมายในการใช้งานไฟล์เช่นการตรวจสอบว่าไฟล์นั้นเป็นไฟล์ที่ซ่อนอยู่หรือตรวจสอบว่าไฟล์เป็นไฟล์แบบอ่านอย่างเดียวหรือไม่ นักพัฒนายังสามารถใช้เมธอด files.readallbytes (path) เพื่ออ่านไฟล์ทั้งหมดลงในหน่วยความจำ วิธีนี้ส่งคืนอาร์เรย์ไบต์และยังสามารถส่งผลลัพธ์ไปยังตัวสร้างสตริงเพื่อสร้างเอาต์พุตสตริง วิธีนี้ทำให้มั่นใจได้ว่าเมื่อมีการอ่านเนื้อหาไบต์ทั้งหมดของไฟล์ทรัพยากรจะถูกปิดโดยไม่คำนึงว่ามีข้อยกเว้น IO หรือข้อยกเว้นที่ไม่ได้ตรวจสอบอื่น ๆ ซึ่งหมายความว่าหลังจากอ่านไฟล์ไปยังเนื้อหาบล็อกล่าสุดไม่จำเป็นต้องปิดไฟล์ โปรดทราบว่าวิธีนี้ไม่เหมาะสำหรับการอ่านไฟล์ขนาดใหญ่ เนื่องจากอาจมีพื้นที่หน่วยความจำไม่เพียงพอ นักพัฒนาควรระบุการเข้ารหัสอักขระของไฟล์เพื่อหลีกเลี่ยงข้อยกเว้นหรือข้อผิดพลาดในการแยกวิเคราะห์
ซอร์สโค้ดของ readallbytes (PATH) วิธี:
<span style = "ตัวอักษรขนาด: 32px;"> </span> <span style = "ตัวอักษรขนาด: 18px;">/*** อ่านไบต์ทั้งหมดจากไฟล์ วิธีการทำให้มั่นใจได้ว่าไฟล์ถูกปิด * เมื่อไบต์ทั้งหมดได้รับการอ่านหรือข้อผิดพลาด I/O หรือข้อยกเว้นรันไทม์ * อื่น ๆ ถูกโยนทิ้ง * โปรดทราบว่าวิธีนี้มีไว้สำหรับกรณีง่ายๆที่มัน * สะดวกในการอ่านไบต์ทั้งหมดเป็นอาร์เรย์ไบต์ มันไม่ได้มีไว้สำหรับ * อ่านในไฟล์ขนาดใหญ่ * * @param Path * เส้นทางไปยังไฟล์ * * @return อาร์เรย์ไบต์ที่มีไบต์ที่อ่านจากไฟล์ * * @throws ioexception * หากข้อผิดพลาด I/O เกิดขึ้นจากการอ่านจากสตรีม * หากมีขนาดใหญ่กว่า 2G 2GB} * @THROWS SecurityException * ในกรณีของผู้ให้บริการเริ่มต้นและตัวจัดการความปลอดภัยได้รับการติดตั้ง * @link SecurityManager#CheckRead (String) CheckRead} * วิธีการถูกเรียกใช้เพื่อตรวจสอบการอ่านไฟล์ */</span> <span style = "font-size: 18px;"> public Static byte [] readallbytes (เส้นทาง) พ่น ioexception {ลอง (seekableByTechannel sbc = files.newbytechannel (เส้นทาง); sbc.size (); ถ้า (ขนาด> (ยาว) max_buffer_size) โยน outofMemoryError ใหม่ ("ขนาดอาร์เรย์ที่จำเป็นมากเกินไป"); ส่งคืนอ่าน (ใน (int) ขนาด); }} </span>อ่านเพียงบรรทัดเดียวเท่านั้น
แพ็คเกจ entrynio; นำเข้า java.io.ioException; นำเข้า java.nio.file.files; นำเข้า java.nio.file.Paths; คลาสสาธารณะ BufferAndChannel {โมฆะสาธารณะคงที่หลัก (สตริง [] args) {ลอง {system.out.println (สตริงใหม่ (files.readallbytes (paths.get ("c: //filechannelimpl.java"))))) } catch (ioexception e) {e.printstacktrace (); -ซอร์สโค้ดของวิธีการ readalllines
รายการคงที่สาธารณะ <String> readAllines (เส้นทางพา ธ , Charset CS) พ่น IOException {ลอง (bufferedReader reader = newBufferedReader (PATH, CS)) {รายการ <String> ผลลัพธ์ = new ArrayList <> (); สำหรับ (;;) {String line = reader.readline (); if (line == null) break; result.add (บรรทัด); } ผลตอบแทนผลลัพธ์; - แพ็คเกจ entrynio; นำเข้า java.util.list; นำเข้า java.io.ioException; นำเข้า java.nio.charset.standardcharsets; นำเข้า java.nio.file.files; นำเข้า java.nio.file.Paths; Public Class BufferandChannel {โมฆะสาธารณะคงที่หลัก (สตริง [] args) {// ถ้าเป็นไฟล์ข้อความคุณสามารถอ่านได้เช่นนี้ โทรหาวิธี readAllines ลอง {<span style = "space สีขาว: pre"> </span> // พารามิเตอร์ที่สองสามารถละเว้นได้หลังจาก JDK1.8 ค่าเริ่มต้นคือรายการการเข้ารหัส UTF-8 <string> lines = files.readallLines (paths.get ("c: //filechannelimpl.java"), StandardCharSets.UTF_8); StringBuilder sb = new StringBuilder (); สำหรับ (สายสตริง: บรรทัด) {sb.append (บรรทัด+"/n"); ///r/n newline} สตริง fromfile = sb.toString (); System.out.println (FromFile); } catch (ioexception e) {e.printstacktrace (); -วิธีใช้ Java8 Streams:
ก่อนอื่นให้ดูการใช้งานซอร์สโค้ด
สตรีมคงที่สาธารณะ <String> บรรทัด (พา ธ พา ธ ) พ่น IOException {สายคืน (เส้นทาง, StandardCharsets.UTF_8); - แพ็คเกจ entrynio; นำเข้า java.io.ioException; นำเข้า java.nio.file.files; นำเข้า java.nio.file.Paths; คลาสสาธารณะ BufferandChannel {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// java8 เพิ่มวิธีการลองลอง {// java8 ใช้สตรีมมิ่งเพื่ออ่านไฟล์ทำให้ไฟล์มีประสิทธิภาพมากขึ้น sans-serif; ">" c: //filechannelimpl.java "</span>)). foreach (system.out :: println); } catch (ioexception e) {e.printstacktrace (); -ต้องใช้บรรทัดเดียวในการอ่านไฟล์และเขียนไฟล์
แพ็คเกจ entrynio; นำเข้า Java.util.Arrays; นำเข้า java.util.list; นำเข้า java.io.ioException; นำเข้า java.nio.file.files; นำเข้า java.nio.file.Paths; นำเข้า java.nio.file.standardopenoption; คลาสสาธารณะ BufferAndChannel {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// java8 เพิ่มเมธอดสายสตริง filepath = "c: //filechannelimpl.java"; ลอง {// java8 อ่านไฟล์ในสตรีมซึ่งมีประสิทธิภาพมากขึ้น/*files.lines (paths.get (filepath)). foreach ((บรรทัด)-> {ลอง {files.write (paths.get ("// 1.java"), line.getBytes () E.PrintStackTrace ();}}); * / /* files.ReadallLines (เส้นทางพา ธ ) ส่งคืนค่าของรายการ <string> ประเภทซึ่งออกแบบมาสำหรับ files.write ()* เพราะ files.write () ต้องผ่านพารามิเตอร์ของการวนซ้ำ <? ขยาย charsequence> type * * files.write (พา ธ พา ธ , iterable <? ขยาย charsequence> บรรทัด, openoption ... ตัวเลือก) */ list <String> stringStream = files.readallLines (paths.get (filePath)); // เนื่องจาก files.lines (พา ธ พา ธ ) ส่งคืนสตรีม <String> คุณสามารถใช้วิธีการต่อไปนี้เพื่อเป็นรายการ <string> // รายการ <String> StringStream2 = array.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" } catch (ioexception e) {e.printstacktrace (); -บทความข้างต้น jdk1.7 java.nio.file.files ต้องการเพียงหนึ่งบรรทัดของรหัสเพื่อรับรู้ไฟล์ข้างต้น นี่คือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น