在API的java.io包中有一个类File,此类主要定义了一些关于java虚拟机访问文件、文件属性、操作文件的方法等。
-
其构造函数有: File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。 File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。 File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。 File(URI uri) 通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。
//可以将已经存在的,或者不存在的文件或者目录封装成file对象 例如将 路径 D:\\a.txt封装成为路径
File file = new File("D:\\a.txt");// File(String pathname)
File file1 = new File("D:\\","a.txt");//File(String parent, String child)
File file2 = new File("D:\\");
File file21 = new File(file2,"a.txt");// File(File parent, String child)
-
其字段主要有 static String pathSeparator 与系统相关的路径分隔符字符,为方便起见,表示为字符串。 static char pathSeparatorChar 与系统相关的路径分隔符。 static String separator 与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。 static char separatorChar 与系统相关的默认名称分隔符。
可以看出,其字段都是与分隔符有关的,以前我们使用系统路径分隔符通过System.getProperty(“file.separator”),而在File类里面特意对其进行了封装
String fileSeparator = System.getProperty("file.separator");
File file = new File("D:"+fileSeparator+"a.txt");
//改写为
File file2 = new File("D:"+File.separator+"a.txt");
-
其常见方法有 获取文件名称 getName(); 获取文件路径 getPath(); getAbsolutePath(); 获取文件大小 length(); 获取文件修改时间 lastModified(); 创建文件 createNewFile(); 删除文件 delete(); 创建目录 mkdir(); 删除目录 delete(); 文件是否存在 exists(); 是否是文件 isFile(); 是否是目录 isDirectory(); 重命名 renameTo(File dest) 列出可用的文件系统根(盘符) listRoots(); 剩余空间 getFreeSpace() 总空间 getTotalSpace() 可用空间 getUsableSpace()
File file = new File("txt.txt");
String name = file.getName();
System.out.println("文件名:" + name);
String path = file.getPath();
System.out.println("文件路径:" + path);
String absolutePath = file.getAbsolutePath();
System.out.println("文件绝对路径:" + absolutePath);
long length = file.length();
System.out.println("文件大小"+length);
long time = file.lastModified();
//System.out.println("最后修改时间"+time);
Date date = new Date(time);
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
String dateString = dateFormat.format(date);
System.out.println("最后修改时间"+dateString);
//创建文件 如果文件不存在,则创建,文件存在,则不创建
File file = new File("file.txt");
boolean b = file.createNewFile();
System.out.println("b:" + b);
boolean d = file.delete();
System.out.println(d);
File dirFile = new File("abc");
boolean bDir = dirFile.mkdir();//创建目录
dirFile.delete();//删除目录
System.out.println(bDir);
dirFile = new File("abc\\ab\\a");
dirFile.mkdirs();//创建多级目录
//删除多级目录需要迭代删除,删除一次只能删除最里面的一级目录
File file = new File("txt.txt");
file.mkdir();//创建一个文件夹 名字为txt.txt
boolean b = file.exists();//文件是否存在
System.out.println(b);
//最好先判断文件是否存在
System.out.println(file.isFile());//是否是文件
System.out.println(file.isDirectory());//是否是目录
File file1 = new File("txt.txt");//已经存在的文件
File file2 = new File("txt1.txt");
file1.renameTo(file2);//将txt.txt重命名为txt1.txt
File file3 = new File("D:\\1.txt");
file2.renameTo(file3);//将txt1.txt剪切到D盘并重命名为1.txt
File[] fileList = File.listRoots();//列出可用的文件系统根(盘符)
for (int i = 0; i < fileList.length; i++)
{
System.out.println(fileList[i]);
}
File file = new File("D:\\");
System.out.println(file.getFreeSpace());//剩余空
System.out.println(file.getTotalSpace());//总空间
System.out.println(file.getUsableSpace());//可用空间
String[] list()
返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
String[] list(FilenameFilter filter)
返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。
/*
* 获取当前目录下的文件以及文件夹的名称,包含隐藏文件
* 调用list方法的File对象中封装的必须是目录
* 否则会发生空指针异常
* 如果访问的是系统级目录也会发生空指针异常
* 如果目录存在但是没有内容,会返回一个长度为0的数组。
* */
File file = new File("C:\\");
String[] list = file.list();//获取当前目录下所有的文件
for (int i = 0; i < list.length; i++)
{
System.out.println(list[i]);
}
public class Test
{
public static void main(String[] args) throws Exception
{
fileList("E:\\",".jpg");
}
/**
* 遍历某目录下的某后缀的文件
* @param path 文件目录
* @param suffix 后缀
*/
public static void fileList(String path,String suffix)
{
File file = new File(path);
String[] files = file.list(new Filter(suffix));
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
}
}
/**
* 用于实现FilenameFilter接口的类的实例用于过滤文件名
*/
class Filter implements FilenameFilter
{
String suffix;
public Filter(String suffix) {
this.suffix = suffix;
}
@Override
public boolean accept(File dir, String name) {
return name.endsWith(suffix);
}
}
File[] listFiles(FileFilter filter)
返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
File[] listFiles(FilenameFilter filter)
返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
public class Test
{
public static void main(String[] args) throws Exception
{
fileList("E:\\",".jpg");
}
/**
* 遍历某目录下的某后缀的文件
* @param path 文件目录
* @param suffix 后缀
*/
public static void fileList(String path,String suffix)
{
File file = new File(path);
File[] files = file.listFiles(new Filter(suffix));
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
}
}
/**
* 用于实现FilenameFilter接口的类的实例用于过滤文件名
*/
class Filter implements FilenameFilter
{
String suffix;
public Filter(String suffix) {
this.suffix = suffix;
}
@Override
public boolean accept(File dir, String name) {
return name.endsWith(suffix);
}
}
public class Test
{
public static void main(String[] args) throws Exception
{
fileList("D:\\");
}
/**
* 遍历某目录下的某后缀的文件
* @param path 文件目录
*/
public static void fileList(String path)
{
File file = new File(path);
File[] files = file.listFiles(new Filter());
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
}
}
/**
* 实现FileFilter接口的类的实例用于过滤隐藏文件
*/
class Filter implements FileFilter
{
@Override
public boolean accept(File pathname) {
return !pathname.isHidden();
}
}
深度遍历:对指定目录进行所有内容的列出(包含字目录的内容)
public static void main(String[] args)
{
File file = new File("D:\\JAVA_jar\\c3p0-0.9.5.2");
//判断此目录是否存在
boolean exists = file.exists();
if(exists)//存在
{
deepFile(file);
}
}
/**
* 遍历文件夹下所有的文件
* @param file 需要遍历的路径
*/
public static void deepFile(File file)
{
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if(files[i].isDirectory())//是目录
{
deepFile(files[i]);
}
System.out.println(files[i]);
}
}
删除一个带内容的目录
public static void main(String[] args)
{
File file = new File("D:\\c3p0-0.9.5.2");
//判断此目录是否存在
boolean exists = file.exists();
if(exists)//存在
{
removeDir(file);
}
}
/**
* 删除一个带内容的目录
* @param file 需要删除的文件
*/
public static void removeDir(File file)
{
File[] files = file.listFiles();
for (File file2 : files) {
if(file2.isDirectory())
{
removeDir(file2);
}
file2.delete();
}
}