一、File类
- java.io.file类用于表示文件或者目录,即我们可以通过File类操作硬盘上的文件或者目录;FIle类智能用于操作文件或目录的信息(大小、名称等),不能用于访问文件内容(目录);
- 常用API方法
- File(String filename):指定文件名的构造器
- long length():文件长度
- String lastModified();
- String getName();
- String getPath();
- boolean exists();
- boolean dir.isFile();
- boolean dir.isDirectory();
- boolean mkdir();
- File[] listFile();
public class FileDemo {
public static void main(String[] args) {
//创建File对象,此时不会在硬盘上创建以下文件或文件夹的
//可以将已有的或不存在的文件或文件夹封装成File对象
File f1 = new File("a.txt");
//在c:\abc目录下创建1.txt文件
File f2 = new File("c:\\abc","1.txt");
//c:\abc目录下创建1.txt文件
File d = new File("c:\\abc");
File f3 = new File(d,"1.txt");
System.out.println("f1:"+f1);
System.out.println("f2:"+f2);
System.out.println("f3:"+f3);
}
}
4.常用方法实例
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
public class FileDemo {
public static void main(String[] args) throws Exception {
File dir = new File(".");
//1.显示当前路径
System.out.println(dir.getCanonicalPath());
//2.创建一个demo文件夹
File demo = new File(dir,"demo");//创建了一个demo对象
if(!demo.exists()){
demo.mkdir();
}
//3.在demo文件夹下创建txt文件
File test = new File(demo,"test1.txt");
if(!test.exists()){
//在指定目录下创建文件,如果文件已经存在,则不创建,返回false;
//和输出流不一样,输出流一建立就会创建对象。如果已存在,则会覆盖。
test.createNewFile();//touch
}
//4.查看目录内容
File[] fileList = demo.listFiles();
System.out.println(Arrays.toString(fileList));
//5.显示test的绝对路径名、相对路径名
System.out.println(test.getAbsolutePath());//绝对
System.out.println(test.getCanonicalPath());//相对路径
//6.文件长度、上次修改时间
System.out.println(test.length());
//日期格式转换
Date d = new Date(test.lastModified());
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = df.format(d);
System.out.println(time);
test.delete();
demo.delete();
}
}
输出结果
D:\servyou\20150304
[.\demo\test1.txt]
D:\servyou\20150304\.\demo\test1.txt
D:\servyou\20150304\demo\test1.txt
0
2015-03-12 14:57:46
二、过滤器
1.String[] list()方法:返回字符串数组,返回指定路径下的所有文件和文件夹;
例子:
public class FilterDemo {
public static void main(String[] args) {
//创建一个文件对象
File f = new File("c:\\");
//将指定目录下的文件或者文件夹的名称存储到字符串数组中,包含隐藏文件。
String[] names = f.list();
System.out.println(names);
System.out.println("C盘目录下的所有文件和文件夹是:");
for(String name:names){
System.out.println(“”name);
}
}
}
输出结果:
C盘目录下的所有文件和文件夹是:
[Ljava.lang.String;@4f1d0d
01create_data_lib.pdc
1
1.xml
1.xml.bak
Program Files
等等不再列出
2.上述例子中包含c盘下的隐藏文件,那么如何过滤出这些隐藏文件,并把它们输出出来呢?
public class FilterDemo {
public static void main(String[] args) {
//创建文件对象
File f = new File("c:\\");
File[] files = f.listFiles(new FilterByHidden());
for(File file1 : files){
System.out.println(file1);
}
}
}
class FilterByHidden implements FileFilter {
@Override
public boolean accept(File pathname) {
return pathname.isHidden();
}
}
过滤器的原理:
1,首先获取到该目录所有内容,用list()
2. 对这些内容进行遍历在遍历中加入条件。条件:accept(pathname);
3. 凡是符合条件,accept 方法返回true,就将这些符合条件的进行存储
4. 将存储的内容返回,这样就得到了过滤后的内容
关于过滤器再举几个例子:
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
public class FilterDemo {
public static void main(String[] args) {
//创建文件对象
File f = new File("c:\\");
//示例1:找出C盘下隐藏的文件或文件夹
File[] files1 = f.listFiles(new FilterByHidden());
// 示例2:找出C盘下拓展名为.xml的文件或文件夹
File[] files2 = f.listFiles(new FilterByJava());
// 示例3:找出C盘下拓展名为.xml的文件或文件夹
File[] files3 = f.listFiles(new FilterBySuffix(".txt"));
for(File file1 : files1){
System.out.println(file1);
}
for(File file1 : files2){
System.out.println(file1);
}
for(File file1 : files3){
System.out.println(file1);
}
}
}
//查找隐藏文件/文件夹的过滤器
class FilterByHidden implements FileFilter {
@Override
public boolean accept(File pathname) {
return pathname.isHidden();
}
}
//查找.java文件的过滤器
class FilterByJava implements FilenameFilter{
@Override
public boolean accept(File dir , String name){
return name.endsWith(".xml");
}
}
//查找任意拓展名的过滤器
class FilterBySuffix implements FilenameFilter{
private String suffix;
public FilterBySuffix(String suffix){
super();
this.suffix = suffix;
}
@Override
public boolean accept(File dir , String name){
return name.endsWith(suffix);
}
}