您的位置:首页 > 编程语言 > Java开发

java中的IO流之File类(一)

2015-12-20 21:32 519 查看
File类
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");
}
}
}


通过简单的方法调用及递归可以实现文件层次结构的打印输出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: