——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
File类:是用来操作文件和文件夹的类(流只能操作数据,不能操作文件)
一、获取信息
获取文件名称:getName()
获取相对路径:getPath( )
获取绝对路径:getAbsolutePath( )
获取绝对路径中的父目录:getParent( )
获取最后一次修改的时间:lastModefied( )
获取文件的长度:length( )
import java.io.*;
import java.text.*;
import java.util.*;
public class FileDemo
{
public static void main(String[] args)
{
File f1=new File("f:\\aa.txt");
String name=f1.getName();
String path=f1.getPath();
String absolutePath=f1.getAbsolutePath();
String parent=f1.getParent();
long time=f1.lastModified();
long length=f1.length();
//转换时间格式
Date d=new Date(time);
DateFormat df=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
String conTime=df.format(d);
System.out.println("name:"+name);
System.out.println("path:"+path);
System.out.println("absolutePath:"+absolutePath);
System.out.println("parent:"+parent);
System.out.println("time:"+time);
System.out.println("转换后的时间为"+conTime);
System.out.println("length:"+length);
}
}
File类的其他主要方法:
File listRoots( ) :列出可用的系统根,如 C,D , F 盘 等
String list( ):返回一个字符串数组,表示目录中的文件和目录
String list( FilenameFilter ): 这里传入了一个过滤器,可以指定要获取的文件类型
File listFiles( ) :返回文件数组,表示目录中的文件
boolean createNewFile( ):创建一个空文件
boolean mkdir( ) :创建一个新目录
boolean mkdirs( ):创建一个多层新目录
boolean delete( ) : 删除文件或目录
boolean renameTo(File) : 重命名文件
import java.io.*;
public class FileTest2
{
public static void main(String[] args) throws Exception
{
//test1();
//test2();
//test3();
//test4();
test5();
}
public static void test1()
{
File[] root=File.listRoots(); //列出可用系统根,该方法为静态方法
for(File r:root)
{
System.out.println(r);
}
}
public static void test2()
{
File f2=new File("f:\\abc");
String[] fileName=f2.list(); //列出指定目录的文件和目录
for(String s:fileName)
{
System.out.println(s);
}
String[] javaFileName=f2.list(new FileByJava());//列出目录中的符合过滤器要求的文件和目录
for(String s:javaFileName)
{
System.out.println(s);
}
}
public static void test3()
{
File f3=new File("f:\\abc");
File[] file=f3.listFiles();
for(File f:file)
{
System.out.println(f.length()); //可以操作文件,打印各文件的长度
}
}
public static void test4() throws IOException
{
File file1=new File("f:\\cc.txt");
file1.createNewFile(); //创建 cc.txt 文件
file1.delete(); //删除指定文件
File file2=new File("f:\\dd");
file2.mkdir(); //创建 dd文件夹,只能创建不存在的一层的
File file3=new File("f:\\ee\\ff\\gg");
file3.mkdirs(); // mkdirs()方法,可以创建不存在的多层文件夹
}
public static void test5() throws IOException
{
File f5=new File("f:\\111.txt");
//f5.createNewFile();
File renameFile=new File("g:\\222.txt");//把文件重命名,如果是剪切文件也可以用这方法
f5.renameTo(renameFile);
}
}
class FileByJava implements FilenameFilter //定义一个过滤器,通过实现FilenameFilter接口
{
public boolean accept(File dir,String name) //覆盖接口中的accept()方法
{
return name.endsWith("java"); //如果文件符合该要求,返回true
}
}
列出指定目录下的所有内容:
因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可,在列出过程中出现的还是目录的话,还可以再次调用本功能,也就是函数自身调用自身,这种表现形式,或者编程手法,称为递归。
递归要注意:
1、限定条件;
2、要注意递归的次数,尽量避免内存溢出。
import java.io.*;
public class ListAllFile
{
public static void main(String[] args)
{
File file=new File("f:\\aa");
listAll(file);
}
public static void listAll(File file)
{
File[] files=file.listFiles();
for(File f:files)
{
if(f.isDirectory()) //判断遍历到的文件是否文件夹,是的话就调用自身(即递归)
{
listAll(f);
}
System.out.println(f);
}
}
}
删除一个带内容的目录,删除原理:
在window中,删除目录从里面往外删除的,既然是从里往外删除,就需要用到递归。
import java.io.*;
public class DeleteFile
{
public static void main(String[] args)
{
File file=new File("f:\\aa");
deleteAll(file);
System.out.println("删除成功");
}
public static void deleteAll(File file)
{
File[] files=file.listFiles();
for(File f:files)
{
if(f.isDirectory())
{
deleteAll(f); //判断是否目录,递归
}
f.delete();
}
file.delete(); //这个不能遗漏,最后要把最外面的文件夹也删除
}
}