1.1 File类作用
-
文件可认为是相关记录或放在一起的数据的集合。文件一般存放在存储介质上:硬盘、u盘、光盘、软盘、云盘等。
-
java.io.File 类是专门对文件进行操作的类。(只能对文件本身进行操作,不能对文件内容操作)
-
File类是“文件和目录路径名的抽象表示”。 而不是指文件的内容(IO)。
-
File类定义了一些与平台无关的方法操作,如:创建、删除文件和重命名等。
-
Java中目录被看成是一个特殊的文件。 File.listFiles()方法可以返回目录中所有的子目录和文件。
-
在unix下路径分隔符为(/),而在windos中则是为(\),在java中可以正确的处理不同系统中的分隔符。注意:从1.5开始在java中可以统一使用(/)来作为路径分隔符。
1.2 File类的构造方法
-
public File(String pathname); 以pathname为路径创建File对象,如果pathname是相对路径,则是相对于Java的系统属性user.dir中的路径。(对eclipse创建的java工程来说,就是该工程的根目录。)
-
public File(File dir,String name);
- public File(String parentName,String name);
1.3 File类文件属性
1.3.1 属性:
-
public static final String separator 存储了当前系统的名称分隔符,在 UNIX 和Mac系统上,此字段的值为 '/';在 Windows 系统上,它为 '\';为了程序的跨平台特性,文件的路径应该用这个属性值来代表。
-
public static final char pathSeparator 存储了当前系统默认路径分割符号,在 UNIX 和Mac系统上,此字段的值为':',Windows系统是';'。
1.4 使用File类对文件进行访问
方法名 | 描述 |
---|---|
public boolean canRead() | 是否可读 |
public boolean canWrite() | 是否可写 |
public boolean exists() | 文件或目录是否存在 |
public boolean isDirectory() | 是否是目录(文件夹) |
public boolean isFile() | 是否是文件(非目录) |
public boolean isHidden() | 是否是隐藏文件 |
public long lastModified() | 最后一次修改的时间 |
public long length() | 返回文件大小,以字节为单位 |
public String getName() | 返回文件的名字(不包含路径) |
public String getPath() | 返回创建File时使用指定的路径;提示 |
public String getAbsolutePath() | 返回此File对象的绝对路径名 |
public File getAbsoluteFile() | 返回该文件的绝对路径的文件对象。 |
public String getParent() | 返回该文件所在的目录的路径。 |
public File getParentFile() | 返回该文件所在的目录File对象。 |
示例代码:
File f1 = new File("C:/a.txt");
String a1 = f1.getAbsolutePath();
System.out.println("a1:" + a1);
String path1 = f1.getPath();// 返回创建 File的路径
System.out.println("path1:" + path1);
File f2 = new File("helloworld.txt");
String a2 = f2.getAbsolutePath();
System.out.println("a2:" + a2);
File f3 = f2.getAbsoluteFile();
System.out.println("f3:" + f3.getPath());
/** 在使用该方法的时候,最好把File 转成以绝对路径描述的FIle对象 */
String parent = f3.getParent();// 得到該File 所在目录的路径String
System.out.println("parent:" + parent);
/** 在使用该方法的时候,最好把File 转成以绝对路径描述的FIle对象 */
File parentFile = f3.getParentFile();
System.out.println("parentFile:" + parentFile);// 得到該File 所在目录的路径File
String path2 = f2.getPath();// 返回创建 File的路径
System.out.println("path2:" + path2);
String name = f2.getName();// 得到文件名字
System.out.println("name:" + name);
boolean exists = f2.exists();
System.out.println("exists:" + exists);
if (exists) {
/*** 以下方法都需要操作平台去操作文件,在使用的时候,最好对该文件判断是否存在 **/
boolean canRead = f2.canRead();
System.out.println("canRead:" + canRead);
boolean canWrite = f2.canWrite();
System.out.println("canWrite:" + canWrite);
boolean hidden = f2.isHidden();
System.out.println("hidden:" + hidden);
boolean file = f2.isFile();
System.out.println("file:" + file);
boolean directory = f2.isDirectory();
System.out.println("directory:" + directory);
long lastModified = f2.lastModified();
System.out.println("最后一次修改的时间:" + lastModified);
long length = f2.length();
System.out.println("length:" + length);
/*** 以上方法都需要操作平台去操作文件 **/
}
1.5 使用File类对文件进行操作
方法名 | 描述 |
---|---|
public boolean createNewFile() | 当文件不存在是,则创建一个空文件(非目录) |
public boolean delete() | 删除文件。如果是目录必须是空目录才能删除 |
public boolean mkdir() | 创建此抽象路径名指定(最后一级)的目录 |
public boolean mkdirs() | 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录 |
public boolean renameTo(File dest) | 重新命名此抽象路径名表示的文件 |
示例代码:
package main3;
import java.io.File;
import java.io.IOException;
public class Main2 {
public static void main(String[] args) {
File f1 = new File("a/text.txt");
/**** 创建文件(要确保该文件所在的目录存在,否则会抛IO异常) ****/
if (!f1.exists()) {
try {
boolean createNewFile = f1.createNewFile();
System.out.println("createNewFile:" + createNewFile);
} catch (IOException e) {
e.printStackTrace();
}
} else {
System.out.println("该文件已存在...");
}
/** 删除文件(如果该File是目录,则必须保证该目录问空目录。且只删除最后一级目录) */
File f2 = new File("b/text.txt");
boolean delete = f2.delete();
System.out.println("delete:" + delete);
/** 创建目录(只创建最后一级目录,也需要确保该目录所在的目录存在,否则返回false) */
File f3 = new File("c");
boolean mkdir = f3.mkdir();
System.out.println("mkdir:" + mkdir);
/** 创建多级目录 */
File f4 = new File("d/b/f/c/c");
boolean mkdirs = f4.mkdirs();
System.out.println("mkdirs:" + mkdirs);
System.out.println("正常结束...");
testRenameTo();
}
private static void testRenameTo() {
// renameTo 剪切功能
File from = new File("test.mp3");// 剪切的源文件的路径描述
File to = new File("helloworld.mp3");// 粘贴的目标文件的路径描述
/** 如果源文件和目标文件所在的目录相同,则就变成了重名功能 **/
boolean renameTo = from.renameTo(to);
System.out.println(renameTo);
}
}
1.6 使用File类浏览目录中的文件和子目录
方法名 | 描述 |
---|---|
public String[] list() | 返回此目录中的文件名和目录名的数组 |
public File[] listFiles() | 返回此目录中的文件和目录的File实例数组 |
public File[] listFiles(FileFilter filter) | 返回此目录中满足指定过滤器的文件和目录 |
课堂练习:使用 递归算法 打印出目录(文件夹)中所有文件与目录(包括目录内部的文件和目录)。
private static void listChilds(File f){
if (f==null)
return;
System.out.println(f.getPath());
if (f.isFile())
return;
File[] files = f.listFiles();
for (File file : files)
listChilds(file);
}
示例代码:
File file = new File("D:\\java");//
File f2 = new File(file, "java001");
System.out.println(f2);
File f4 = new File("D:\\java", "java001");
System.out.println(f4);
String[] list = file.list();// 返回该目录下的所有文件的名字
for (String path : list) {
System.out.println(path);
}
// 返回该目录下的所有 File 文件路径描述
File[] listFiles = file.listFiles();
if (listFiles != null) {
for (File f : listFiles) {
System.out.println(f);
}
}
// 返回此目录中满足指定过滤器的文件和目录
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.isDirectory()) {
return true;
} else {
return false;
}
}
});
for (File f : files) {
System.out.println("--->" + f);
}