FileDescriptor是"文件描述符".
FileDescriptor可以被用來表示開放的文件,開放的套接字等.
當FileDescriptor表示文件來說,當FIleDescriptor表示某文件時,我們可以通俗的將FIleDescriptor看成該文件.但是,我們不能直接通過FIleDescriptor對該文件進行操作;若需要通過FIleDescriptor對該文件進行操作,則需要創建FileDescriptor對應的FileOutputStream,再對文件進行操作.
in,out,err的介紹
- in:標准輸入(鍵盤)的描述符
- out:標准輸出(屏幕)的描述符
- err:標准錯誤輸出(屏幕)的描述符
他們三個的原理和用法都類似,下面通過out來進行深入的研究
out的作用和原理
out時標准輸出(屏幕)的描述符,但是他有什么作用呢?
我們可以通俗理解,out 就代表了標准輸出(屏幕).如我們要輸出信息到屏幕,既可以通過out來操作,但是,out 有沒有提供輸出信息到屏幕的接口,怎么辦呢?
很簡單,我們創建Out對應的"輸出流對象",然后通過"輸出流"的write()等接口就可以輸出信息到屏幕上去了.
1 public static void main(String[] args) throws IOException 2 { 3 FileOutputStream out = new FileOutputStream(java.io.FileDescriptor.out); 4 out.write("你好啊!".getBytes()); 5 out.close(); 6 }
程序輸出:你好啊!
為了方便我們的操作,java早已經為我們封裝好了能再屏幕上輸出信息的接口:通過System.out
因此上面的代碼等同於:System.out.print("你好啊!").
示例代碼
1 public class FileDescriptorTest 2 { 3 private static final String FileName = "D:\\baiduyun\\filetest\\ddd.txt"; 4 private static final String OutText = "Hi FileDescriptor"; 5 6 public static void main(String[] args) throws IOException 7 { 8 // testStandFD(); 9 // testWrite(); 10 testRead(); 11 } 12 13 /** 14 * 該程序的效果 等價於 System.out.println(OutText); 15 * 16 * @Method_Name: testStandFD 17 * @Description: * void 18 * @date 2018年11月11日 19 * @author zhangj 20 * @throws IOException 21 */ 22 public static void testStandFD() throws IOException 23 { 24 FileOutputStream out = new FileOutputStream(FileDescriptor.out); 25 PrintStream print = new PrintStream(out); 26 print.write(OutText.getBytes()); 27 } 28 29 /** 30 * FileDescriptor寫入示例程序 31 * 32 * @Method_Name: testWrite 33 * @Description: * void 34 * @date 2018年11月11日 35 * @author zhangj 36 * @throws IOException 37 */ 38 private static void testWrite() throws IOException 39 { 40 // 新建file對應FileOutPutStream對象 41 FileOutputStream fout = new FileOutputStream(FileName); 42 // 獲得file對應的FileDescripto對象 43 FileDescriptor fd = fout.getFD(); 44 // 根據FileDescriptor創建fileOutPutStream對象 45 FileOutputStream out = new FileOutputStream(fd.out); 46 fout.write("Hello".getBytes()); 47 out.write("World".getBytes()); 48 out.close(); 49 fout.close(); 50 } 51 52 private static void testRead() throws IOException 53 { 54 // 新建文件“file.txt”對應的FileInputStream對象 55 FileInputStream fis = new FileInputStream(FileName); 56 // 獲取文件“file.txt”對應的“文件描述符” 57 FileDescriptor fd = fis.getFD(); 58 // 根據“文件描述符”創建“FileInputStream”對象 59 FileInputStream fiss = new FileInputStream(fd); 60 System.out.println("in1.read():" + (char) fis.read()); 61 System.out.println("in2.read():" + (char) fiss.read()); 62 fis.close(); 63 fiss.close(); 64 } 65 }