java中的IO流之File类(一)
2015-12-20 21:32
519 查看
File类
File类表示文件或目录在JVM中的一种抽象形式。
File类对文件或目录进行了封装,提供对文件或目录的操作方法,可以方便编程时使用。
注意:
•创建File对象,File可以表示文件或目录。
•不同的OS中,路径的分隔符也不相同。windows中,路径分隔符可以使用/或\\;Linux或unix中,路径分隔符使用/;File类提供了一个静态的路径分隔符的属性,该属性根据JVM在不同的OS中,可以得到当前OS的路径分隔符。
下面的一些方法在以后的编程应用中会经常用到,应该牢记。
•函数的递归:
函数的递归调用,就是在函数中,调用自身。
1、函数递归,必须要有一个能够终止递归的出口。
2、函数递归时,还要注意,如果递归的层次过多,可能造成内存溢出。(比如不停的创建对象,当递归循环到一定程度,内存装不下所new出来的对象就会导致内存溢出)
我们来打印一个目录的层次结构
例如:
Test
Acorn
acorn.txt
Banji
Banji
banji.txt
bandi.conf
banjia.txt
Colro
Coral
coral
coral.txt
db.conf
hu.txt
从外往内打印出文件的层次结构,属于同一个层次结构的目录或者文件应该有相同的tab位即空格数量相同。
分析:
1、我们第一步应该是要获取到文件夹及里面的内容,可以通过File类中的方法实现
2、当在同一级中,如果是文件夹则继续递归遍历里面的内容,如果是文件则直接打印
3、我们应该定义一个方法专门来负责打印tab的数量
下面来看代码
通过简单的方法调用及递归可以实现文件层次结构的打印输出
File类表示文件或目录在JVM中的一种抽象形式。
File类对文件或目录进行了封装,提供对文件或目录的操作方法,可以方便编程时使用。
注意:
•创建File对象,File可以表示文件或目录。
•不同的OS中,路径的分隔符也不相同。windows中,路径分隔符可以使用/或\\;Linux或unix中,路径分隔符使用/;File类提供了一个静态的路径分隔符的属性,该属性根据JVM在不同的OS中,可以得到当前OS的路径分隔符。
下面的一些方法在以后的编程应用中会经常用到,应该牢记。
package com.jcxy.demo17; import java.io.File; import java.io.IOException; public class FileTest { public static void main(String[] args) throws IOException { File f = new File("f:\\wanghu"); File f2 = new File("f:\\wanghu"); //当文件不存在时创建并返回true,存在则返回 System.out.println(f.createNewFile()); // 测试此抽象路径名表示的文件或目录是否存在。 System.out.println(f.isFile()); System.out.println(f.delete()); //测试此抽象路径名表示的文件或目录是否存在。 System.out.println(f.exists()); //返回此抽象路径名的绝对路径名形式。 File f3 = f2.getAbsoluteFile(); System.out.println(f3); //返回由此抽象路径名表示的文件或目录的名称。 System.out.println(f2.getName());//wanghu //返回此抽象路径名父目录的路径名字符串 System.out.println(f2.getParent()); //返回此抽象路径名父目录的抽象路径名 System.out.println(f2.getParentFile()); //测试此抽象路径名表示的文件是否是一个标准文件 System.out.println(f2.isFile()); //返回此抽象路径名表示的文件最后一次被修改的时间。 long l = f2.lastModified(); System.out.println(l); File f4 = new File("f:\\hu\\haha"); //创建此抽象路径名指定的目录。只能创建一层 System.out.println(f4.mkdir());//false //创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。可以创建多层 System.out.println(f4.mkdirs());//true //与系统有关的默认名称分隔符 System.out.println(f4.separator); } }接下来我们可以通过上面的方法来完成一个题目,不过在完成之前应该了解一下什么是递归,下面会用到,以后也会用到。
•函数的递归:
函数的递归调用,就是在函数中,调用自身。
1、函数递归,必须要有一个能够终止递归的出口。
2、函数递归时,还要注意,如果递归的层次过多,可能造成内存溢出。(比如不停的创建对象,当递归循环到一定程度,内存装不下所new出来的对象就会导致内存溢出)
我们来打印一个目录的层次结构
例如:
Test
Acorn
acorn.txt
Banji
Banji
banji.txt
bandi.conf
banjia.txt
Colro
Coral
coral
coral.txt
db.conf
hu.txt
从外往内打印出文件的层次结构,属于同一个层次结构的目录或者文件应该有相同的tab位即空格数量相同。
分析:
1、我们第一步应该是要获取到文件夹及里面的内容,可以通过File类中的方法实现
2、当在同一级中,如果是文件夹则继续递归遍历里面的内容,如果是文件则直接打印
3、我们应该定义一个方法专门来负责打印tab的数量
下面来看代码
package com.jcxy.demo17; import java.io.File; public class Test6 { public static void main(String[] args) { //首先找到这个文件 File file = new File("f:/Test"); //定义一个方法用于完成文件夹的遍历 //第一个参数是文件路径,第二个参数用于递归的时候传入,来打印tab数量 getDirPath(file,0); } private static void getDirPath(File file, int count) { //得到Test文件夹中的文件夹及文件 File[] fes = file.listFiles(); //如果file中没有文件夹,只有文件,则打印输出文件名称即可 //不用向下执行,所以直接return if(fes == null) { return; } //定义一个方法负责打印tab数量 printSpace(count); //得到文件夹的名字 String strFile = file.getName(); System.out.println(strFile); //接着文件夹中文件和文件夹应该多一个tab位 count++; //遍历文件夹中的文件或文件夹 for(File fe : fes) { //如果是文件夹则继续递归调用 if(fe.isDirectory()) { getDirPath(fe,count); } else { printSpace(count); System.out.println(fe.getName()); } } } private static void printSpace(int count) { for(int i = 0; i < count; i++) { System.out.print("\t"); } } }
通过简单的方法调用及递归可以实现文件层次结构的打印输出
相关文章推荐
- java线程同步——竞争条件的荔枝+锁对象
- 了解Spring set依赖注入
- Metrics3.0集成SpringMVC
- Java访问指示符 friendly public private protected
- Java解析Json字符串--数组或列表
- java线程——中断线程+线程状态+线程属性(优先级)
- java线程——什么是线程?
- JAVA 简单使用JDBC实现连接数据
- 深入分析JavaWeb Item31 -- JDBC(MySQL)事务管理
- JavaWeb Session问题整理
- JAVA File的创建及相对路径绝对路径
- 用Eclipse跑Hadoop程序的注意事项
- HBase JavaAPI操作示例
- JavaWeb--概述
- Java类中的成员变量的赋值方法
- springmvc(二)非注解的处理器映射器和适配器
- Eclipse主题修改,换个颜色换个心情撸代码吧
- 新手入门,学习java从小白到大神应该从何做起?
- Java常用类和方法重点总结
- springMVC用MyEclipse配置的简单小例子