Java File类
JAVA中的File类可以用在创建文件、目录;修改文件、目录名称;删除文件、目录;查询目录下的文件。好家伙,增删改查齐活了。但是如果你想往某个文件中写入数据,File类表示无能为力。
在File类中,有个关键词叫做抽象路径名
File类有三个构造方法(public),分别是
public File(String pathname)
public File(String parent, String child)
public File(URI uri)
上面说的抽象路径名
就是指构造方法中的参数?抽象路径名代表文件或者目录,pathname,parent,child为抽象文件名
使用构造方法创建一个File对象
File file = new File("HellWorld.java");
这只是创建了一个File对象,并没有创建一个名为HelloWorld.java的文件
接着如果要创建文件
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
这时在和源文件同一级目录下新建了一个HelloWorld.java的文件
如果创建文件夹
file.mkdir();
这时就会创建一个HelloWorld.java的文件夹
如何在指定目录下创建文件、目录?
需要使用public File(String parent, String child)
创建File对象
创建文件
//注意这里有两个'\',其中一个是转义字符
File file = new File("E:\\","Test.txt");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
创建文件夹
File file = new File("E:\\","Test.txt");
file.mkdir();
注意windows中文件、目录名是不区分大小写
的,如果有和抽象路径名
相同的文件或目录存在,是不能创建的
File对象中常用的方法:
createNewFile() 创建新文件
mkdir() 创建文件夹
delete() 删除文件、目录(只能删除空文件夹)
renameTo(File file2) 重命名文件、目录(如果file2和原文件路径不一致,那么原文件将被移动到file2指定的目录并重命名)
list() 查询目录下的子目录和文件名,返回String[]
listFile() 查询目录下的子目录和文件名,返回File
list()设置过滤和listFile设置过滤
import java.io.File;
import java.io.FilenameFilter;
public class Test {
public static void main(String args[]){
File file = new File("E:\\");
MyFilenameFilter myFilenameFilter = new MyFilenameFilter();
myFilenameFilter.setSuffix(".txt");
String[] names = file.list(myFilenameFilter);
for(String name : names){
System.out.println(name);
}
}
}
class MyFilenameFilter implements FilenameFilter {
private String suffix;
public void setSuffix(String suffix){
this.suffix = suffix;
}
@Override
//每次检查到dir目录中的一个文件或目录就调用一次accept方法,这里的dir不是检查的的File对象而是调用MyFilenameFileter方法的File对象,name为目录或文件名,也可以叫抽象路径名。
public boolean accept(File dir, String name) {
return name.endsWith(suffix) && new File(dir,name).isFile();
}
}
注意:list()方法返回的是String[],listFile()返回的是File[];有两种过滤接口FileFilter和FilenameFilter,FileFilter中方法为boolean accept(File pathname),FilenameFilter中的方法为boolean accept(File dir, String name)
删除非空文件夹
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class Test {
public static void main(String args[]){
File file = new File("E:\\","123");
//方法一,使用自己写的dfsdelete删除文件夹
dfsdelete(file);
//方法二,使用org.apache.commons.io.FileUtils类提供的方法deleteDirectory删除文件夹
try {
FileUtils.deleteDirectory(file);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void dfsdelete(File file){
if(file.delete() == false){
File[] files = file.listFiles();
for(File f : files){
if(f.delete() == false){
dfsdelete(f);
}
}
file.delete();
}
}
}
获得文件后缀
File file = new File("E:\\","test12345.txt");
//"\\"是转义字符串
String[] name = file.getName().split("\\.");
String suffix = name[name.length-1];
System.out.println("suffix is: "+suffix);
修改文件、目录名
File file = new File("E:\\","test12345.t.txt");
file.renameTo(new File("E:\\","lalala"));
修改文件后缀
这不是和上面的一样?
File file = new File("E:\\","lalala.txt");
String name = file.getName();
if(file.isFile()){
int tail = name.length();
int a = tail-1;
while(name.charAt(a) != '.'){
a--;
}
name = name.replace(name.substring(++a,tail),"java");
System.out.println(name);
}
file.renameTo(new File("E:\\",name));