Java基础-IO流对象之File类
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.IO技术概述
回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了。那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据读出来继续使用呢?其实要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、U盘等)上。
当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作,当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作,因此我们把这种输入和输出动作称为IO操作。
二.File类的作用
我们可以一起看看Java的API对File类的描述如下:
综上,我们可以总结File类有以下特点:
1>.将操作系统中的文件(file),目录(文件夹,directory),路径(path),封装成File对象;
2>.File对象提供很多方法可以操作系统中的内容;
3>.File类是与系统无关的类;
三.File类静态的成员变量
我们在编写程序的时候,最好不要把操作系统的分隔符或者是路径的分隔符写死,除非你明确它的执行环境,不然最好还是用变量去代替!File定义了这两个变量,用法如下:
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.note5; 8 9 import java.io.File; 10 11 public class FileDemo { 12 public static void main(String[] args) { 13 //与系统有关的路径分隔符,windows用“;”表示,Linux用“:”表示。 14 String pathseparator = File.pathSeparator; 15 System.out.println(pathseparator); 16 17 //与系统有关的默认名称分隔符,Windows为“\”,而Linux以“/”分割 18 String separator = File.separator; 19 System.out.println(separator); 20 21 } 22 } 23 24 /* 25 以上代码执行结果如下: 26 ; 27 \ 28 */
四.File类构造方法
1>.File(String pathname)
传递路径名:可以写到文件夹,也可以写到一个文件。该方法发的作用就是将路径封装成File类型对象。
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.note5; 8 9 import java.io.File; 10 11 public class FileDemo { 12 public static void main(String[] args) { 13 //注意,windows路径可以写成“\\”进行分割。 14 File file = new File("D:\\10.Java"); 15 System.out.println(file); 16 //Linux操作系统就建议用这种方式写,不过在Windows操作系统这样写也是可以的,效果和上面等效! 17 file = new File("D:/10.Java"); 18 System.out.println(file); 19 } 20 } 21 22 /* 23 以上代码执行结果如下: 24 D:\10.Java 25 D:\10.Java 26 */
2>.File(String parent,String child)
传递路径:需要传递字符串父路径(parent)以及字符串子路径(child),用“,”进行分割。
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.note5; 8 9 import java.io.File; 10 11 public class FileDemo { 12 public static void main(String[] args) { 13 //注意,windows路径可以写成“\\”进行分割。 14 File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram","eclipse"); 15 System.out.println(file); 16 } 17 } 18 19 /* 20 以上代码执行结果如下: 21 D:\10.Java\JavaSE\eclipse\Myprogram\eclipse 22 */
3>.File(File parent,String child)
传递路径:传递File类型父路径,字符串子路径。
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.note5; 8 9 import java.io.File; 10 11 public class FileDemo { 12 public static void main(String[] args) { 13 File parent = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram"); 14 //父路径为一个File对象 15 File file = new File(parent,"eclipse"); 16 System.out.println(file); 17 } 18 } 19 20 /* 21 以上代码执行结果如下: 22 D:\10.Java\JavaSE\eclipse\Myprogram\eclipse 23 */
五.File类的常用方法
1>.File类创建文件功能
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.note5; 8 9 import java.io.File; 10 import java.io.IOException; 11 12 public class FileDemo { 13 public static void main(String[] args) throws IOException { 14 File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram","yinzhengjie.txt"); 15 //创建file文件,如果创建成功就返回true,如果文件已经存在就不会创建,并返回false,注意,该方法需要抛异常:IOException. 16 boolean res = file.createNewFile(); 17 System.out.println(res); 18 } 19 } 20 21 /* 22 以上代码执行结果如下: 23 true 24 */
2>.File类创建目录功能
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.note5; 8 9 import java.io.File; 10 import java.io.IOException; 11 12 public class FileDemo { 13 public static void main(String[] args) throws IOException { 14 File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram","yinzhengjie"); 15 //创建单级文件夹 16 boolean res = file.mkdir(); 17 System.out.println(res); 18 file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram","yinzhengjie/test/a/b/c"); 19 //创建多级文件夹 20 res = file.mkdirs(); 21 System.out.println(res); 22 } 23 } 24 25 /* 26 以上代码执行结果如下: 27 true 28 true 29 */
3>.File类删除功能【删除有风险,运行需谨慎!】
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.note5; 8 9 import java.io.File; 10 import java.io.IOException; 11 12 public class FileDemo { 13 public static void main(String[] args) throws IOException { 14 File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram","yinzhengjie"); 15 //删除空文件夹,删除成功就返回true,删除失败就返回false,删除方法不走回收站,直接从硬盘中删除。 16 boolean res = file.delete(); 17 System.out.println(res); 18 19 } 20 } 21 22 /* 23 以上代码执行结果如下: 24 true 25 */
4>.File类获取功能
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.note5; 8 9 import java.io.File; 10 import java.io.IOException; 11 12 public class FileDemo { 13 public static void main(String[] args) throws IOException { 14 File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram","yinzhengjie"); 15 //获取文件名称 16 String fileName = file.getName(); 17 System.out.println(fileName); 18 //获取父路径 19 String getParent = file.getParent(); 20 System.out.println(getParent); 21 //获取绝对路径 22 File absoluteFile = file.getAbsoluteFile(); 23 System.out.println(absoluteFile); 24 25 26 } 27 } 28 29 /* 30 以上代码执行结果如下: 31 yinzhengjie 32 D:\10.Java\JavaSE\eclipse\Myprogram 33 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie 34 */
5>.File类判断功能
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.note5; 8 9 import java.io.File; 10 import java.io.IOException; 11 12 public class FileDemo { 13 public static void main(String[] args) throws IOException { 14 File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram","yinzhengjie"); 15 if(!file.exists()) { //如果file对象封装的路径就执行以下代码 16 file.mkdirs(); //创建该目录对象 17 System.out.println(file.isDirectory()); //判断其是否为目录。 18 System.out.println(file.isFile()); //判断其是否为文件,如果上面为true,则说明该File对象是目录而非文件 19 } 20 } 21 } 22 23 /* 24 以上代码执行结果如下: 25 true 26 false 27 */
6>.File类list获取功能
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.note5; 8 9 import java.io.File; 10 import java.io.IOException; 11 12 public class FileDemo { 13 public static void main(String[] args) throws IOException { 14 File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram"); 15 //用list方法获取文件和目录,返回的是字符串数组 16 String[] fileList = file.list(); 17 for (String fileName : fileList) { 18 System.out.println(fileName); 19 } 20 21 //用listFiles方法返回的是文件的绝对路径,返回的是File数组,推荐使用这种方法。 22 File[] listFiles = file.listFiles(); 23 for (File fileName : listFiles) { 24 System.out.println(fileName); 25 } 26 27 //获取系统中的所有根目录,包括你的移动分区,硬盘分区,只要是挂在到当前操作系统中的都能查出来! 28 File[] listRoots = file.listRoots(); 29 for (File rootName : listRoots) { 30 System.out.println(rootName); 31 } 32 } 33 } 34 35 /* 36 以上代码执行结果如下: 37 eclipse 38 workspace 39 yinzhengjie 40 D:\10.Java\JavaSE\eclipse\Myprogram\eclipse 41 D:\10.Java\JavaSE\eclipse\Myprogram\workspace 42 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie 43 C:\ 44 D:\ 45 E:\ 46 F:\ 47 */
六.文件过滤器
1>.文件过滤器原理分析
a>.listFiles() 遍历目录的同时,获取到了文件名全路径,调用过滤器的方法 accept将获取到的路径传递给accept反方的参数pathname;
b>.accept方法接受到了参数pathname,参数的是listFiles传递来的,在accept方法通过一系列逻辑判断(比如判断这个路径是否为Java文件),然后返回相应的布尔值;
c>.一旦返回了true,listFiles将路径,保存在File数组中,如果为false,那么就真的被过滤掉了(就不会保存在File数组中);
2>.案例展示
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.note5; 8 9 import java.io.File; 10 import java.io.FileFilter; 11 import java.io.IOException; 12 13 class MyFile implements FileFilter{ 14 15 @Override 16 public boolean accept(File pathname) { 17 //判断文件是否为java文件, 18 return pathname.getName().toLowerCase().endsWith(".java"); 19 } 20 21 } 22 23 24 public class FileDemo { 25 26 public static void main(String[] args) throws IOException { 27 File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\yinzhengjie"); 28 File[] listFiles = file.listFiles(new MyFile()); 29 for (File fileName : listFiles) { 30 System.out.println(fileName); 31 } 32 } 33 } 34 35 /* 36 以上代码执行结果如下: 37 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayArrayDemo.java 38 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayArrayDemo1.java 39 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayArrayDemo2.java 40 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayArrayDemo3.java 41 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\callName.java 42 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\Car.java 43 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\CarDemo.java 44 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\Demo1.java 45 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\Dog.java 46 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\DogDemo.java 47 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\Engine.java 48 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\Person.java 49 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\PersonDemo.java 50 */
七.方法的递归调用
方法的递归调用不仅仅是Java语言自己的特点,类似于Python,C++,C,golang等高级语言都有递归用法,递归方法说白了就是自己调用自己。递归方法适用于方法中运算的主题不变,但是运行的时候,参与运行的方法参数会变化,关于Java中的递归调用要注意以下几点:
a>.递归一定要有出口,必须可以让程序停下;
b>.递归次数不能过多;
c>.构造方法,禁止递归;
接下来我们就来几个递归的案例展示吧:
1>.递归变量全目录
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.note5; 8 9 import java.io.File; 10 import java.io.IOException; 11 12 13 public class FileDemo { 14 15 public static void main(String[] args) throws IOException { 16 File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\yinzhengjie"); 17 getAllDir(file); 18 } 19 20 public static void getAllDir(File dir) { 21 File[] listFiles = dir.listFiles(); 22 for (File file : listFiles) { 23 //判断变量file表示的路径是不是文件夹 24 if(file.isDirectory()) { 25 //如果是目录就继续遍历这个目录 26 getAllDir(file); 27 }else { 28 System.out.println(file); 29 } 30 } 31 } 32 33 } 34 35 /* 36 以上代码执行结果如下: 37 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayListDemo\arrayArrayDemo.java 38 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayListDemo\arrayArrayDemo1.java 39 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayListDemo\arrayArrayDemo2.java 40 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayListDemo\arrayArrayDemo3.java 41 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\arrayArrayDemo.class 42 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\arrayArrayDemo1.class 43 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\arrayArrayDemo2.class 44 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\arrayArrayDemo3.class 45 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\callName.class 46 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\Car.class 47 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\CarDemo.class 48 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\Demo1.class 49 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\Dog.class 50 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\DogDemo.class 51 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\Engine.class 52 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\Person.class 53 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\PersonDemo.class 54 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\callName.java 55 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\Car.java 56 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\CarDemo.java 57 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\Demo1.java 58 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\Dog.java 59 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\DogDemo.java 60 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\Engine.java 61 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\Person.java 62 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\PersonDemo.java 63 */
2>.递归求和计算
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.note5; 8 9 import java.io.File; 10 import java.io.IOException; 11 12 13 public class FileDemo { 14 15 public static void main(String[] args) throws IOException { 16 File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\yinzhengjie"); 17 int sum = getSum(10000); 18 System.out.println(sum); 19 } 20 21 /*如果只是求和运算的话,不建议用递归,因为递归设计到弹栈和压栈,开销是比较大的用for循环还是 22 相当不错的,不过这里只是为了演示递归用法,就不用这么吹毛求疵啦!*/ 23 public static int getSum(int number) { 24 if(number == 1) { 25 return 1; 26 } 27 return number + getSum(number - 1 ); 28 } 29 30 } 31 32 /* 33 以上代码执行结果如下: 34 50005000 35 */
3>.递归求阶乘
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.note5; 8 9 import java.io.File; 10 import java.io.IOException; 11 12 13 public class FileDemo { 14 15 public static void main(String[] args) throws IOException { 16 File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\yinzhengjie"); 17 int sum = getFactorial(5); 18 System.out.println(sum); 19 } 20 21 /*如果只是求和运算的话,不建议用递归,因为递归设计到弹栈和压栈,开销是比较大的用for循环还是 22 相当不错的,不过这里只是为了演示递归用法,就不用这么吹毛求疵啦!*/ 23 public static int getFactorial(int number) { 24 if(number == 1) { 25 return 1; 26 } 27 return number * getFactorial( number - 1 ); 28 } 29 } 30 31 /* 32 以上代码执行结果如下: 33 120 34 */
4>.递归计算斐波那契数列
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.note5; 8 9 import java.io.File; 10 import java.io.IOException; 11 12 13 public class FileDemo { 14 15 public static void main(String[] args) throws IOException { 16 int sum = getFibonaccieries(45); 17 System.out.println(sum); 18 } 19 20 /*如果只是求和运算的话,不建议用递归,因为递归设计到弹栈和压栈,开销是比较大的用for循环还是 21 相当不错的,不过这里只是为了演示递归用法,就不用这么吹毛求疵啦!*/ 22 public static int getFibonaccieries(int number) { 23 if( number == 1 ) { 24 return 1; 25 }else if( number == 2 ) { 26 return 1; 27 }else { 28 return getFibonaccieries(number -1 ) + getFibonaccieries(number - 2 ); 29 } 30 } 31 } 32 33 /* 34 以上代码执行结果如下: 35 1134903170 36 */
5>.遍历目录下的所有java文件
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.note5; 8 9 import java.io.File; 10 import java.io.FileFilter; 11 import java.io.IOException; 12 13 class MyFile implements FileFilter{ 14 15 @Override 16 public boolean accept(File pathname) { 17 //判断获取的是目录,直接返回true 18 if(pathname.isDirectory()) { 19 return true; 20 } 21 //如果不是目录再判断文件是否为java文件, 22 return pathname.getName().toLowerCase().endsWith(".java"); 23 } 24 25 } 26 27 28 public class FileDemo { 29 30 public static void main(String[] args) throws IOException { 31 File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\yinzhengjie"); 32 getJavaFiles(file); 33 } 34 35 public static void getJavaFiles(File dir) { 36 //调用File对象方法listFiles()获取,加入过滤器 37 File[] listFiles = dir.listFiles(new MyFile()); 38 for (File fileName : listFiles) { 39 //对fileName路径进行判断,是否为文件夹 40 if(fileName.isDirectory()) { 41 getJavaFiles(fileName); 42 }else { 43 System.out.println(fileName); 44 } 45 } 46 } 47 48 } 49 50 /* 51 以上代码执行结果如下: 52 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayListDemo\arrayArrayDemo.java 53 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayListDemo\arrayArrayDemo1.java 54 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayListDemo\arrayArrayDemo2.java 55 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayListDemo\arrayArrayDemo3.java 56 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\callName.java 57 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\Car.java 58 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\CarDemo.java 59 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\Demo1.java 60 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\Dog.java 61 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\DogDemo.java 62 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\Engine.java 63 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\Person.java 64 D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\PersonDemo.java 65 */