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 }
来源:https://www.cnblogs.com/zhangj-ymm/p/9943597.html