1. File类
在Java语言的java.io包中,由File类提供了描述文件和目录的操作与管理方法。
作用:File类主要用于命名文件、查询文件属性和处理文件目录。
构造方法摘要 | |
File(File parent, String child) 这个child可以使一个文件名也可以是一个子目录 这个parent是一个File对象 | |
File(String pathname) 这里的路径名可以是一个目录也可以是一个文件 | |
File(String parent, String child) 这个parent为一个目录,parent事先必须存在,否则异常 | |
File(URI uri) 通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例 |
一个对应于某磁盘文件或目录的File对象一经创建, 就可以通过调用它的方法来获得文件或目录的属性。
1)
public boolean exists( )
判断文件或目录是否存在(
测试磁盘中指定的文件或目录是否存在
)
2)public boolean isFile( ) 判断是否文件
3)public boolean isDirectory( ) 判断是否目录
4)public String getName( ) 返回文件名或目录名
5)public String getPath( ) 返回文件或目录的路径( 相对路径 )。
2)public boolean isFile( ) 判断是否文件
3)public boolean isDirectory( ) 判断是否目录
4)public String getName( ) 返回文件名或目录名
5)public String getPath( ) 返回文件或目录的路径( 相对路径 )。
6)public StringgetAbsolutePath()
返回文件或目录的路径(
绝对路径
)。
7)public long length( ) 获取文件的长度
8) public String[ ] list ( ) 将目录中所有文件名保存在字符串数组中返回。 ( 返回目录中所有文件名字符串 )
7)public long length( ) 获取文件的长度
8) public String[ ] list ( ) 将目录中所有文件名保存在字符串数组中返回。 ( 返回目录中所有文件名字符串 )
File类中还定义了一些对文件或目录进行管理、操作的方法,常用的方法有:
1) public boolean renameTo( File newFile ); 重命名文件
2) public void delete( ); 删除文件
3) public boolean mkdir( ) ; 创建目录( 创建文件对象指定的目录(单层目录) )
1) public boolean renameTo( File newFile ); 重命名文件
2) public void delete( ); 删除文件
3) public boolean mkdir( ) ; 创建目录( 创建文件对象指定的目录(单层目录) )
4)
public boolean createNewFile
();创建文件对象指定的文件
其中:
File.speparator的作用是判断在不同的系统中斜杠的方向,
在windows中斜杠的方向是向右斜的\\ ;
在Linux中斜杠的方向是向左斜的//,所以可见File.speparator具有跨平台性,是程序更加健壮。建议采用这种方法代替\\或者//
下面举几个例子更好的说明File类:
// 获取某一目录下后缀名为".txt"的所有文件名
public static void main(String[] args) {
File dir = new File("D:\\File");
if (!dir.exists()) {
//创建目录
dir.mkdir();
System.out.println("该目录不存在!");
}
// 返回目录中所有文件名字符串
String[] names = dir.list();
for (String name : names) {
if (name.endsWith(".txt"))
System.out.println(name);
}
}
// 递归遍历某一目录下所有文件和目录
public static void main(String[] args) {
File dir = new File("D:\\File");
showDir(dir, 0);
}
public static void showDir(File dir, int level) {
System.out.println(getLevel(level) + dir.getName());
level++;
//列出该目录中的所有文件
File[] files = dir.listFiles();
for (int x = 0; x < files.length; x++) {
//判断files[x]是否为目录
if (files[x].isDirectory()) {
showDir(files[x], level);
} else {
//获取文件名
System.out.println(getLevel(level) + files[x].getName());
}
}
}
public static String getLevel(int level) {
StringBuilder sb = new StringBuilder();
sb.append("|--");
for (int x = 0; x < level; x++) {
sb.insert(0, "| ");
}
return sb.toString();
}
删除一个带内容的目录
分析:删除目录这时应该用delete()方法,而该方法提示此路径名表示一个目录,则该目录必须为空才能删除,所以这种有内容的目录的情况下,就不能直接删除。需要遍历该目录下的所有文件,直到某个文件为止,也就是“从内往外删”。
需要用到的方法:listFiles()得到当前目录下的所有文件,isDirectory()判断是不是目录,不是目录,则删除。
代码:
// 删除一个带内容的目录
public static void main(String[] args) {
File dir = new File("D:\\File");
deleteDir(dir);
}
public static void deleteDir(File dir) {
// 列出该目录中的所有文件
File[] files = dir.listFiles();
for (int x = 0; x < files.length; x++) {
// 判断是不是目录
if (files[x].isDirectory()) {
deleteDir(files[x]);
} else {
files[x].delete();
}
}
dir.delete();
}