JDK1.0就存在的File类:用于对文件进行一般性操作。由于NIO中有对File对象进行改善,现在对其进行一般性说明。
File类有四个构造函数:(都必须传入路径地址String或者Path)
File(String pathname)
File(File parent, String child)
File(String parent, String child)
File(URI uri)
parent指定路径(父目录),可以是File类对象也可以是字符串,child中也可以加入路径层级,但要注意,所用的路径必须存在,不存在的路径不会新建。
关于斜杠和反斜杠,只能如下生硬地先记住吧:
\\:右手用两个,比如new File("D:\\abc\\" + "Test.txt");
/:左手用一个。比如new File("D:/abc/" + "Test.txt");
创建目录
public boolean mkdir()
创建path指向的最后一个文件夹,若之前文件不存在,则创建失败。(不报错)
public boolean mkdirs()
根据path创建一系列文件夹,若文件不存在,挨个创建。
import java.io.File;
/** * Created by li on 2016/10/24. * 1 */ public class FileInputDemo { public static void main(String[] args) { File file = new File("D:/abc/xyz/hello");
System.out.println(file.exists());
file.mkdirs();
}
}
返回抽象路径名表示目录下的文件名和目录名。
public File[] listFiles()
返回抽象路径名下的所有文件。与list()方法的不同之处在于一个返回的是字符串,另一个返回的是File类对象。
import java.io.File;
/** * Created by li on 2016/10/24. * 1 */ public class FileInputDemo { public static void main(String[] args) { File file = new File("D:/");
System.out.println(file.exists());
String\[\] dirName = file.list();
for (String d : dirName
) {
System.out.println(d);
}
}
}
文件管理
在进行文件操作时,常需要知道一个关于文件的信息。
Java的File类提供了方法来操纵文件和获得一个文件的信息。如getName()返回文件名,getParent()返回父目录名,exists()测试文件或目录是否存在。
然而,File类是不对称的,说它不对称,意思是虽然存在允许验证一个简单文件对象属性的很多方法,但是没有响应的方法来修改这些属性,即有get无set。
另外,File类还可以对目录和文件进行删除、属性修改等工作。方法名都比较直观,在此不多做介绍了。进行一下操作的时候先做判断(exists) createNewFile() delete()
使用FilenameFilter
希望能够限制由list()方法返回的文件,使它仅返回那些与一定的文件名方式或者过滤器(filter)相匹配的文件。
为达到这样的目的,必须使用list()方法的带参数的重载形式:
public String[] list(FilenameFilter filter)
在该形式中,filter是一个实现了FilenameFilter接口的类的对象。
该接口中有一个**accept()**方法,只有该方法判断为true的文件名会被list方法返回。所以可以在accept方法中设置筛选规则。(这里使用了策略模式,可以回想一下Java集合中的比较器)。
在此直接放出程序实例,来查看指定目录下的文件:
import java.io.File; import java.io.FilenameFilter;
public class FileTest4 {
public static void main(String\[\] args)
{
File file = new File("D:/abc");
String\[\] names = file.list();
// 列出所有文件及路径
for (String name : names)
{
System.out.println(name);
}
System.out.println("-----------------------");
System.out.println("-------所有文件名为.java结尾的文件-----------");
// 选择.java结尾的文件
for (String name : names)
{
if (name.endsWith(".java"))
{
System.out.println(name);
}
}
// 使用文件过滤器
String\[\] selectedNames = file.list(new FilenameFilter()
{
// 匿名内部类实现了FilenameFilter接口
// 实现接口中的方法
@Override
public boolean accept(File dir, String name)
{
if (name.endsWith(".java")) { return true; }
return false;
}
});
// 只有accept返回true的文件名会被返回到selectedNames数组中
System.out.println("-----------------------");
System.out.println("-------所有文件名为.java结尾的文件-----------");
for (String name : selectedNames)
{
System.out.println(name);
}
}
}