ไฟล์
ไฟล์เป็นตัวแทนนามธรรมของ "ไฟล์" และ "ชื่อพา ธ ไดเรกทอรี"
ไฟล์ได้รับการสืบทอดโดยตรงจากวัตถุการใช้อินเตอร์เฟส serializable และอินเทอร์เฟซที่เปรียบเทียบได้ การใช้อินเทอร์เฟซแบบ serializable หมายความว่าวัตถุไฟล์สนับสนุนการดำเนินการแบบอนุกรม การใช้อินเทอร์เฟซที่เปรียบเทียบได้หมายความว่าวัตถุไฟล์สามารถปรับขนาดได้ ไฟล์สามารถเก็บไว้โดยตรงในชุดที่สั่งซื้อ (เช่น treeet และ treemap)
1. วิธีการทั่วไปสำหรับการสร้างไดเรกทอรีใหม่
วิธีที่ 1: สร้างไดเรกทอรีใหม่ตามเส้นทางสัมพัทธ์
รหัสตัวอย่างมีดังนี้ (สร้างไดเรกทอรีใหม่ "dir" ภายใต้เส้นทางปัจจุบัน):
ไฟล์ dir = ไฟล์ใหม่ ("dir"); dir.mkdir (); วิธีที่ 2: สร้างไดเรกทอรีใหม่ตามเส้นทางสัมบูรณ์
รหัสตัวอย่างมีดังนี้ (สร้างไดเรกทอรีใหม่ "/home/skywang/dir")::
ไฟล์ dir = ไฟล์ใหม่ ("/home/skywang/dir"); dir.mkdirs (); หมายเหตุ: ด้านบนเป็นซอร์สโค้ดของไดเรกทอรีใหม่ "/home/skywang/dir" ภายใต้ระบบ Linux ภายใต้ Windows หากคุณต้องการสร้างไดเรกทอรีใหม่ "d:/dir" ซอร์สโค้ดมีดังนี้:
ไฟล์ dir = ไฟล์ใหม่ ("d:/dir"); dir.mkdir (); วิธีที่ 3
uri uri = uri ใหม่ ("ไฟล์:/home/skywang/dir"); ไฟล์ dir = ไฟล์ใหม่ (uri); sub.mkdir (); หมายเหตุ: คล้ายกับ "วิธีที่ 2" ยกเว้นว่าเส้นทางที่สมบูรณ์จะถูกส่งผ่านใน "วิธีที่ 2" ในขณะที่เส้นทางเต็มจะถูกส่งผ่านใน "วิธีที่ 3" คือ URI ที่สอดคล้องกับเส้นทางเต็ม
2. วิธีการทั่วไปหลายวิธีในการสร้างไดเรกทอรีย่อยใหม่ ตัวอย่างเช่นเราต้องการสร้างไดเรกทอรีย่อยใหม่ภายใต้ไดเรกทอรีย่อย "dir" ของไดเรกทอรีปัจจุบัน มีหลายวิธี:
วิธีที่ 1
ไฟล์ sub1 = ไฟล์ใหม่ ("dir", "sub1"); sub1.mkdir (); หมายเหตุ: ฟังก์ชั่นของวิธีการข้างต้นคือ "DIR/sub1" ในไดเรกทอรีปัจจุบัน หลักฐานสำหรับการทำงานตามปกติคือไดเรกทอรีหลัก "dir" ของ "sub1" มีอยู่แล้ว!
วิธีที่ 2
ไฟล์ sub2 = ไฟล์ใหม่ (dir, "sub2"); sub2.mkdir ();
หมายเหตุ: ฟังก์ชั่นของวิธีการข้างต้นคือ "DIR/sub2" ในไดเรกทอรีปัจจุบัน หลักฐานสำหรับการทำงานตามปกติคือไดเรกทอรีหลัก "dir" ของ "sub2" มีอยู่แล้ว!
วิธีที่ 3
ไฟล์ sub3 = ไฟล์ใหม่ ("dir/sub3"); sub3.MkDirs (); หมายเหตุ: ฟังก์ชั่นของวิธีการข้างต้นคือ "DIR/sub3" ในไดเรกทอรีปัจจุบัน ไม่ต้องการให้มีการดำรงอยู่และสามารถทำงานได้ตามปกติ หากไม่มีเส้นทางแม่ของ "sub3" เมธอด mkdirs () จะสร้างไดเรกทอรีหลักโดยอัตโนมัติ
วิธีที่ 4
ไฟล์ sub4 = ไฟล์ใหม่ ("/home/skywang/dir/sub4"); sub4.mkdirs (); หมายเหตุ: ฟังก์ชั่นของวิธีการข้างต้นคือการสร้างไดเรกทอรีใหม่ "/home/skywang/dir/sub3" ไม่ต้องการให้มีการดำรงอยู่และสามารถทำงานได้ตามปกติ หากไม่มีเส้นทางแม่ของ "sub4" เมธอด mkdirs () จะสร้างไดเรกทอรีหลักโดยอัตโนมัติ
วิธีที่ 5
uri uri = uri ใหม่ ("ไฟล์:/home/skywang/dir/sub5"); ไฟล์ sub5 = ไฟล์ใหม่ (uri); sub5.MkDirs (); หมายเหตุ: คล้ายกับ "วิธีที่ 4" ยกเว้นว่าเส้นทางที่สมบูรณ์จะถูกส่งผ่านใน "วิธี 4" ในขณะที่เส้นทางที่สมบูรณ์จะถูกส่งผ่านใน "วิธีที่ 5" และ URI ที่สอดคล้องกับเส้นทางที่สมบูรณ์จะถูกส่งผ่าน
3. วิธีการทั่วไปหลายประการสำหรับการสร้างไฟล์ใหม่
ตัวอย่างเช่นเราต้องการสร้างไฟล์ใหม่ภายใต้ไดเรกทอรีย่อยของไดเรกทอรีปัจจุบัน "DIR" มีหลายวิธี 1
ลอง {file dir = ไฟล์ใหม่ ("dir"); // รับวัตถุไฟล์ที่สอดคล้องกับไดเรกทอรี "dir" ไฟล์ไฟล์ 1 = ไฟล์ใหม่ (dir, "file1.txt"); file1.createnewfile ();} catch (ioexception e) {e.printstacktrace ();} หมายเหตุ: ฟังก์ชั่นของรหัสด้านบนคือการสร้างไฟล์ใหม่ "file1.txt" ในไดเรกทอรี "DIR" (เส้นทางสัมพัทธ์)
วิธีที่ 2
ลอง {file file2 = ไฟล์ใหม่ ("dir", "file2.txt"); file2.createnewfile ();} catch (ioexception e) {e.printstacktrace ();} หมายเหตุ: ฟังก์ชั่นของรหัสด้านบนคือการสร้างไฟล์ใหม่ "file2.txt" ในไดเรกทอรี "DIR" (เส้นทางสัมพัทธ์)
วิธีที่ 3
ลอง {ไฟล์ file3 = ไฟล์ใหม่ ("/home/skywang/dir/file3.txt"); file3.createnewfile ();} catch (ioexception e) {e.printstacktrace ();} หมายเหตุ: ฟังก์ชั่นของรหัสด้านบนคือการสร้างไฟล์ใหม่ "/home/skywang/dir/file3.txt" (เส้นทางสัมบูรณ์) นี่คือวิธีการที่ใช้เส้นทางสัมบูรณ์ใน Linux ใน Windows คุณสามารถสร้างไฟล์ใหม่ "d: /dir/file4.txt" ผ่านรหัสต่อไปนี้
ลอง {ไฟล์ file3 = ไฟล์ใหม่ ("d: /dir/file4.txt"); file3.createnewfile ();} catch (ioexception e) {e.printstacktrace ();} วิธีที่ 4
ลอง {uri uri = uri ใหม่ ("ไฟล์: /home/skywang/dir/file4.txt"); ไฟล์ file4 = ไฟล์ใหม่ (URI); file4.createnewfile ();} catch (ioexception e) {e.printstacktrace ();} ภาพประกอบ:
คล้ายกับ "วิธีที่ 3" ยกเว้นว่าเส้นทางที่สมบูรณ์จะถูกส่งผ่านใน "วิธีที่ 3" ในขณะที่เส้นทางเต็มจะถูกส่งผ่านใน "วิธี 4" คือ URI ที่สอดคล้องกับเส้นทางเต็ม
4. ตัวอย่างการใช้งาน API ไฟล์
สำหรับการใช้งานโดยละเอียดของ APIs ในไฟล์โปรดดูรหัสตัวอย่าง (fileTest.java):
นำเข้า java.io.file; นำเข้า java.io.ioexception; นำเข้า java.net.uri นำเข้า java.util.calendar; นำเข้า java.text.simpledateFormat; ชั้นเรียนสาธารณะ {โมฆะคงที่สาธารณะ testfiledirapis (); } โมฆะสาธารณะคงที่ testFilestaticFields () {// print path separator ":" system.out.printf ("file.Pathseparator =/"%s/"/n", file.Pathseparator); // พิมพ์ตัวคั่นพา ธ ':' system.out.printf ("file.pathseparatorchar =/"%c/"/n", file.pathseparatorchar); // พิมพ์ตัวคั่น "/" system.out.printf ("file.Separator =/"%s/"/n", file.separator); // พิมพ์ตัวคั่น '/' system.out.printf ("file.Separatorchar =/"%c/"/n", file.Separator); // พิมพ์ตัวคั่น '/' system.out.printf ("file.Separatorchar =/"%c/"/n", file.Separatorchar); } โมฆะสาธารณะคงที่ testfiledirapis () {ลอง {// สร้างไดเรกทอรีใหม่ "dir" ไฟล์ dir = ไฟล์ใหม่ ("dir"); dir.mkdir (); // วิธีที่ 1: สร้างไดเรกทอรีใหม่ "DIR/sub1" ไดเรกทอรีหลัก "dir" ต้องมีอยู่แล้ว! ไฟล์ sub1 = ไฟล์ใหม่ ("dir", "sub1"); sub1.mkdir (); // วิธีที่ 2: สร้างไดเรกทอรีใหม่ "DIR/sub2" ไดเรกทอรีหลัก "dir" ต้องมีอยู่แล้ว! ไฟล์ sub2 = ไฟล์ใหม่ (dir, "sub2"); sub2.mkdir (); // วิธีที่ 3: สร้างไดเรกทอรีใหม่ "DIR/sub3" mkdirs () จะสร้างไดเรกทอรีหลักที่ไม่มีอยู่โดยอัตโนมัติ ไฟล์ sub3 = ไฟล์ใหม่ ("DIR/sub3"); sub3.Mkdirs (); // วิธีที่ 4: สร้างไดเรกทอรีใหม่ "DIR/sub4" สร้างขึ้นตาม "เส้นทางสัมบูรณ์" วิธีการ 3 ครั้งแรกถูกสร้างขึ้นตาม "เส้นทางสัมพัทธ์" String dirpath = dir.getabsolutepath (); // รับเส้นทางสัมบูรณ์ของ "dir" string sub4abspath = dirpath + file.separator + "sub4"; // file.Sparator เป็นตัวคั่น "/" ไฟล์ sub4 = ไฟล์ใหม่ (sub4abspath); sub4.mkdirs (); // วิธีการที่ 5: สร้างไดเรกทอรีใหม่ "DIR/sub5" ตาม uri string uri_sub5_path = "ไฟล์:" + dirpath + file.separator + "sub5"; uri uri_sub5 = ใหม่ uri (uri_sub5_path); ไฟล์ sub5 = ไฟล์ใหม่ (uri_sub5); sub5.Mkdirs (); // วิธีที่ 1: สร้างไฟล์ใหม่ "dir/l1_normal.txt" ไฟล์ l1_normal = ไฟล์ใหม่ (dir, "l1_normal.txt"); l1_normal.createnewfile (); // วิธีที่ 2: สร้างไฟล์ใหม่ "dir/.l1_hide.txt" ไฟล์ l1_hide = ไฟล์ใหม่ ("dir", ".l1_hide.txt"); // ใน Linux ไฟล์เริ่มต้นด้วย "." เป็นไฟล์ที่ซ่อนอยู่ l1_hide.createnewfile (); // วิธีที่ 3: สร้างไฟล์ใหม่ "dir/l1_abs.txt" สตริง dirabspah = dir.getabsolutepath (); // รับเส้นทางสัมบูรณ์ของสตริง DIR l1_abs_path = dirabspah+file.separator+"l1_abs.txt"; ไฟล์ L1_ABS = ไฟล์ใหม่ (L1_ABS_PATH); l1_abs.createnewfile (); //system.out.printf("l1_abs_path=%S/n ", l1_abs_path); //system.out.printf("l1_abs เส้นทาง =%s/n ", l1_abs.getabsolutepath ()); // วิธีที่ 4: สร้างไฟล์ใหม่ "dir/l1_uri.txt" สร้างไฟล์ใหม่ตามสตริง URI uri_path = "ไฟล์:" + dirabspah + file.separator + "l1_uri.txt"; uri uri_l1 = uri ใหม่ (uri_path); //system.out.printf("uri_l1=%S/n ", l1_abs.getabsolutepath ()); ไฟล์ l1_uri = ไฟล์ใหม่ (uri_l1); l1_uri.createnewfile (); // สร้างไฟล์ใหม่ "dir/sub/s1_normal" ไฟล์ s1_normal = ไฟล์ใหม่ (sub1, "s1_normal.txt"); s1_normal.createnewfile (); System.out.printf (" %30s = %s/n", "s1_normal.exists ()", s1_normal.exists ()); System.out.printf (" %30s = %s/n", "s1_normal.getName ()", s1_normal.getName ()); System.out.printf (" %30s = %s/n", "s1_normal.getparent ()", s1_normal.getparent ()); System.out.printf (" %30s = %S/N", "S1_NORMAL.GETPATH ()", S1_NORMAL.GETPATH ()); System.out.printf (" %30s = %S/N", "S1_NORMAL.GETABSOLUTEPATH ()", S1_NORMAL.GETABSOLUTEPATH ()); System.out.printf (" %30s = %S/N", "S1_NORMAL.GETCANONICALPATH ()", S1_NORMAL.GETCANONICALPATH ()); System.out.printf ("%30s =%s คือ/"%s/"/n", "s1_normal.lastmodified ()", s1_normal.lastmodified (), getModifytime (s1_normal.lastmodified ()); System.out.printf (" %30s = %s/n", "s1_normal.touri ()", s1_normal.touri ()); // รายการ "ไฟล์" และ "โฟลเดอร์" ในไดเรกทอรี "DIR" // หมายเหตุ: dir.listfiles () จะสำรวจไดเรกทอรี dir เท่านั้นไม่ใช่ไดเรกทอรีย่อยของ Dir! System.out.println ("--- รายการไฟล์และโฟลเดอร์ ----"); ไฟล์ [] fs = dir.listfiles (); สำหรับ (ไฟล์ f: fs) {string fname = f.getName (); String Absstr = f.isabsolute ()? "[Absolute]": ""; String hiddenstr = f.ishidden ()? "[ที่ซ่อนอยู่]" : ""; String dirstr = f.isdirectory ()? "[ไดเรกทอรี]": ""; String filestr = f.isfile ()? "[ไฟล์]" : ""; System.out.printf ("%-30S%S%S%S%S%S/N", FNAME, FILEST, DIRSTR, ABSSTR, HIDDENSTR); }} catch (exception e) {e.printstacktrace (); }} สตริงคงที่ส่วนตัว getModifyTime (มิลลิสยาว) {// รับปฏิทินวัตถุปฏิทิน Cal = Calendar.getInstance (); // ตั้งเวลาเป็น Millis Cal.settimeinmillis (Millis); // รับวัตถุที่จัดรูปแบบมันจะจัดรูปแบบวันที่ตาม "yyyy-mm-dd hh: mm: ss" simpledateformat sdf = new SimpledateFormat ("yyyy-mm-dd hh: mm: ss"); //system.out.printf("time %s/n ", str); ส่งคืน sdf.format (cal.gettime ()); - การรันผลลัพธ์ (การรันผลลัพธ์ภายใต้ระบบ Ubuntu 12.04 ไม่ใช่ Windows!):
file.PathseParator = ":" file.PathSeparatorchar = ":" file.Separator = "/" file.Saperatorchar = "/" S1_NORMAL.EXISSISS () = True S1_NORMAL.GETNAME () = S1_NORMAL.TXT S1_NORMAL.GETPARENT () s1_normal.getabsolutepath () = /home/skywang/wind_talker/workout/java/skywang/io/io/src/file/dir/sub1/s1_normal.txt s1_normal.getcanonicalic /home/skywang/wind_talker/workout/java/skywang/io/src/file/dir/sub1/s1_normal.txt s1_normal.lastmodified () = 1381730064000 เป็น "2013-10-14 13:54:24 ไฟล์: /home/skywang/wind_talker/workout/java/skywang/io/src/file/dir/sub1/s1_normal.txt --- รายการไฟล์และโฟลเดอร์ ---- l1_uri.txt [ไฟล์] sub1 [ไดเรกทอรี] l1_abs.txt [ไฟล์] [ซ่อน] Sub3 [ไดเรกทอรี] Sub2 [ไดเรกทอรี] L1_NORMAL.txt [ไฟล์]
ผลลัพธ์: เมื่อเรียกใช้โปรแกรมไดเรกทอรีใหม่ "DIR" จะถูกสร้างขึ้นในไดเรกทอรีที่มีไฟล์แหล่งที่มาไดเรกทอรีย่อยและไฟล์ย่อย ดังที่แสดงในรูปด้านล่าง:
ผู้ยื่นเอกสาร
FileDescriptor เป็น "file descriptor"
FileDescriptor สามารถใช้เพื่อแสดงไฟล์เปิดซ็อกเก็ตเปิด ฯลฯ
ในการแสดงไฟล์โดย FileDescriptor: เมื่อ FileDescriptor แสดงไฟล์เราสามารถพิจารณา FileDescriptor เป็นไฟล์ได้ อย่างไรก็ตามเราไม่สามารถทำงานบนไฟล์ได้โดยตรงผ่าน FileDescriptor; หากเราต้องการใช้งานบนไฟล์ผ่าน FileDescriptor เราจำเป็นต้องสร้าง fileOutputStream ที่สอดคล้องกับ FileDescriptor จากนั้นใช้งานบนไฟล์
ออกไปข้างนอก
(1) ใน - descriptor สำหรับอินพุตมาตรฐาน (แป้นพิมพ์)
(2) ออก - ตัวอธิบายสำหรับเอาต์พุตมาตรฐาน (หน้าจอ)
(3) ERR - คำอธิบายของเอาต์พุตข้อผิดพลาดมาตรฐาน (หน้าจอ) มีความคล้ายคลึงกันในหลักการและการใช้งาน มาดำเนินการวิจัยเชิงลึกผ่านออกไป
1.1 บทบาทและหลักการของการออก
Out เป็นตัวอธิบายสำหรับเอาต์พุตมาตรฐาน (หน้าจอ) แต่มันทำอะไร?
เราสามารถเข้าใจได้อย่างง่ายดายซึ่งแสดงถึงเอาต์พุตมาตรฐาน (หน้าจอ) หากเราต้องการส่งออกข้อมูลไปยังหน้าจอเราสามารถใช้งานได้ อย่างไรก็ตาม OUT ไม่ได้ให้อินเทอร์เฟซกับข้อมูลเอาต์พุตไปยังหน้าจอ (เนื่องจาก OUT เป็นวัตถุที่เป็นหลักและ FileDescriptor ไม่มีอินเตอร์เฟสเอาต์พุต) จะทำอย่างไร?
มันง่ายมาก เราสร้าง "Output Stream Object" ที่สอดคล้องกับ OUT จากนั้นเอาต์พุตข้อมูลไปยังหน้าจอผ่านอินเตอร์เฟสเอาต์พุตเช่น Write () ของ "Output Stream" รหัสต่อไปนี้:
ลอง {fileOutputStream out = ใหม่ fileOutputStream (fileDescriptor.out); out.write ('a'); out.close ();} catch (ioexception e) {} ดำเนินการโปรแกรมข้างต้นและตัวอักษร 'A' จะถูกส่งออกบนหน้าจอ
เพื่ออำนวยความสะดวกในการดำเนินการของเรา Java ได้ห่อหุ้ม "อินเทอร์เฟซที่สามารถส่งออกข้อมูลบนหน้าจอได้อย่างง่ายดาย" สำหรับเรา: ผ่าน System.out เราสามารถส่งข้อมูลไปยังหน้าจอได้อย่างง่ายดาย
ดังนั้นเราสามารถแปลงโปรแกรมด้านบนเป็นรหัสต่อไปนี้ได้อย่างเท่าเทียมกัน:
System.out.print ('A'); มาพูดคุยเกี่ยวกับหลักการของรหัสสองรหัสข้างต้นเพื่อดูคำจำกัดความของการออก คำจำกัดความของมันอยู่ใน filedescriptor.java และซอร์สโค้ดที่เกี่ยวข้องมีดังนี้:
ระดับสุดท้ายของคลาสสาธารณะ FileDescriptor {Private Int FD; public Static Final Filedescriptor Out = New Feledescriptor (1); Private FileDescriptor (int fd) {this.fd = fd; usecount = new Atomicinteger (); - จากนี้จะเห็นได้ว่า
(1) OUT เป็นวัตถุ FileDescriptor มันถูกสร้างขึ้นผ่านตัวสร้าง FileDescriptor (Int FD)
(2) การดำเนินการ FileDescriptor (Int FD): กำหนดค่าให้กับวัตถุ FD (ประเภท int) และสร้างตัวแปรนับใหม่โดยใช้ USEcount
วัตถุ FD เป็นตัวแปรที่สำคัญมาก "FD = 1" หมายถึง "เอาต์พุตมาตรฐาน", "FD = 0" หมายถึง "อินพุตมาตรฐาน" และ "FD = 2" หมายถึง "เอาต์พุตข้อผิดพลาดมาตรฐาน"
fileOutputStream out = new fileOutputStream (fileDescriptor.out);
มันคือการใช้ตัวสร้าง FileOutputStream (FileDescriptor FDOBJ) เพื่อสร้าง "วัตถุ FileOutputStream ที่สอดคล้องกับ Filed.out"
เกี่ยวกับวิธีการกำหนด system.out คุณสามารถอ้างถึง "ความเข้าใจเชิงลึกของ System.out.println (" Hello World ")"
ผ่านการเรียนรู้ข้างต้นเรารู้ว่าเราสามารถปรับแต่งสตรีมของตัวอธิบายไฟล์มาตรฐาน [เช่นใน (อินพุตมาตรฐาน), OUT (เอาต์พุตข้อผิดพลาดมาตรฐาน) และ ERR (เอาต์พุตข้อผิดพลาดมาตรฐาน)] เพื่อให้ฟังก์ชั่นอินพุต/เอาต์พุต อย่างไรก็ตาม Java ได้ห่อหุ้มอินเทอร์เฟซที่เกี่ยวข้องสำหรับเรานั่นคือเราสามารถใช้ System.in, System.out, System.err ได้สะดวกยิ่งขึ้น
นอกจากนี้เรายังสามารถปรับแต่ง descriptors ไฟล์สำหรับ "ไฟล์", "ซ็อกเก็ต" ฯลฯ จากนั้นทำงานกับพวกเขา อ้างถึง testWrite (), testread () และอินเทอร์เฟซอื่น ๆ ในรหัสตัวอย่างต่อไปนี้
2. รหัสตัวอย่าง
ซอร์สโค้ดมีดังนี้ (FileDescriptortest.java):
นำเข้า java.io.printstream; นำเข้า java.io.filedescriptor; นำเข้า java.io.fileinputstream; นำเข้า java.io.fileoutputStream; นำเข้า java.io.ioException; คลาสสาธารณะ FileDescriptortest สตริงสุดท้ายคงที่ส่วนตัว outtext = "HI FELEDEScriptor"; โมฆะคงที่สาธารณะหลัก (สตริง [] args) {testWrite (); TESTREAD (); teststandfd (); //system.out.println(outtext); } /*** โปรแกรมทดสอบของ FileDescriptor.out** เอฟเฟกต์ของโปรแกรมนี้เทียบเท่ากับ System.out.println (outtext); */ โมฆะแบบคงที่ส่วนตัว TestStandfd () {// สร้าง printstream printstream out = new printstream (ใหม่ fileOutputStream (fileDescriptor.out)); // เอาต์พุต "HI FileDescriptor" บนหน้าจอออกไป println (outtext); out.close (); } /*** โปรแกรมตัวอย่างการเขียน FileDescriptor** (1) เพื่อแสดงให้เห็นว่า "การสร้าง fileOutputStream โดยชื่อไฟล์" เทียบเท่ากับ "การสร้าง fileOutputStream โดยไฟล์ descriptor ไฟล์" วัตถุ* (2) โปรแกรมจะสร้างไฟล์ใหม่ "ไฟล์. txt" ในไดเรกทอรีที่ "ไฟล์แหล่งที่มา" */ Private Static Void TestWrite () {ลอง {// สร้างวัตถุ fileOutputStream ที่สอดคล้องกับไฟล์ "file.txt" fileOutputStream out1 = ใหม่ fileOutputStream (ชื่อไฟล์); // รับ "ไฟล์ descriptor" ที่สอดคล้องกับไฟล์ "file.txt" filedescriptor fdout = out1.getfd (); // สร้างวัตถุ "fileOutputStream" ตาม "ไฟล์ descriptor" fileOutputStream out2 = ใหม่ fileOutputStream (fdout); out1.write ('a'); // เขียน 'a' ถึง "file.txt" ผ่าน Out1 Out2.Write ('A'); // เขียน 'a' ถึง "file.txt" ผ่าน Out2 ถ้า (fdout! = null) system.out.printf ("fdout ( %s) คือ %s/n", fdout, fdout.valid ()); out1.close (); out2.close (); } catch (ioexception e) {e.printstacktrace (); }} / *** program read filedescriptor** เพื่อแสดง "สร้าง fileInputStream โดยชื่อไฟล์" เทียบเท่ากับ "สร้าง fileInputStream โดยไฟล์ descriptor" วัตถุ* / void private static tertread () {ลอง {// สร้างวัตถุ FileInputStream // รับ "ไฟล์ descriptor" ที่สอดคล้องกับไฟล์ "file.txt" filedescriptor fdin = in1.getfd (); // สร้างวัตถุ "fileInputStream" ตาม "ไฟล์ descriptor" fileInputStream in2 = ใหม่ FileInputStream (FDIN); System.out.println ("in1.read ():"+(char) in1.read ()); System.out.println ("in2.read ():"+(char) in2.read ()); if (fdin! = null) system.out.printf ("fdin ( %s) คือ %s/n", fdin, fdin.valid ()); in1.close (); in2.close (); } catch (ioexception e) {e.printstacktrace (); - ผลการทำงาน:
fdout (java.io.filedescriptor@2b820dda) คือ truein1.read (): ain2.read (): afdin (java.io.filedescriptor@675b7986)