目录
File类的使用
1.关于文件路径的表示
String path;
System.out.println(File.separatorChar);
//路径的表示方法:
//1、/
path = "D:/java300/IO_study01/IO.png";
System.out.println(path);
//2、常量拼接
path ="D:"+File.separator+"java300"+File.separator+"IO_study01"+File.separator+"IO.png";
System.out.println(path);
//前两种方法可以在Linux和Windows系统都有效
//3、使用转义字符,适用windows
path = "D:\\a\\b.txt";
System.out.println(path);
运行结果:
2.File的构造器
- File(String pathname) :将一个字符串路径封装成File对象
- File(String parent,String child):传入一个父级路径和子级路径
- File(File parent,String child):传入一个File类型的父级路径和子级路径
//1、构建File对象
File src = new File(path);
//2、构建File对象
src = new File("D:/java300/IO_study01","IO.png");
src = new File("D:/java300/","IO_study01/IO.png");
//3、构建File对象
src = new File(new File("D:/java300/IO_study01"),"IO.png");
3.绝对路径与相对路径
/**
* 构建File对象
* 相对路径与绝对路径
* 1)、存在盘符: 绝对路径
* 2)、不存在盘符:相对路径 ,当前目录 user.dir
* @param args
*/
public static void main(String[] args) {
String path ="D:/java300/IO_study01/IO.png";
//绝对路径
File src = new File(path);
System.out.println(src.getAbsolutePath());
//相对路径,其中 user.dir 代表当前工程
System.out.println(System.getProperty("user.dir"));
src = new File("IO.png");
System.out.println(src.getAbsolutePath());
//构建一个不存在的文件
src = new File("aaa/IO2.png");
System.out.println(src.getAbsolutePath());
}
运行结果
4.File类的创建和删除
- boolean createNewFile():指定路径不存在该文件时时创建文件,返回true,否则返回false
- boolean mkdir():当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false
- boolean mkdirs():当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false
- boolean delete():删除文件或者删除单级文件夹
/*
* 创建功能
* boolean createNewFile()
* boolean mkdir()
* boolean mkdirs()
* 删除功能
* boolean delete()
*
* 绝对路径:固定不可改变的路径,以盘符开头
* 相对路径:相对某个参照物,不能以盘符开头
* 在eclipse中相对路径相对应当前项目的根目录
*
*
* 注意:删除一个文件夹,这个文件夹下面不能有其他的文件和文件夹
*/
//boolean createNewFile() : 当指定文件不存在时创建文件并返回true,否则返回false
File f1 = new File("d:/a/b.txt");//绝对路径
System.out.println(f1.createNewFile());
/*
* 运行结果:
* 若d盘下不存在目录a则抛异常"系统找不到指定的路径";
* 若d盘下存在a目录且a目录下没有b.txt则在a目录下创建b.txt并返回true否则返回false
*/
File f2 = new File("a.txt");//相对路径
System.out.println(f2.createNewFile());
/*
* 运行结果:
* 若当前项目跟目录下不存在a.txt则创建a.txt并返回true否则返回false;
*/
//boolean mkdir() : 当指定文件夹不存在时创建文件夹并返回true,否则返回false
File f3 = new File("b");
System.out.println(f3.mkdir());
//boolean mkdirs() : 创建指定文件夹,当文件夹所在的目录不存在,则顺道一块创建了,若目标已存在返回false
File f4 = new File("c\\d\\e");
System.out.println(f4.mkdir());//改行返回false,因为该方法无法创建多级目录
System.out.println(f4.mkdirs());
File f5 = new File("c.txt");
System.out.println(f5.mkdir());//创建了名为c.txt的文件夹
//boolean delete() :当指定的文件或文件夹存在时删除文件或者文件夹 并返回true,否则返回false
//如果要删除的目录下有文件或文件夹则必须先删除子目录或子文件,否则删除失败
File f6 = new File("c");
System.out.println(f6.delete());
5.File类的判断功能
- boolean exists():判断指定路径的文件或文件夹是否存在
- boolean isAbsolute():判断当前路路径是否是绝对路径
- boolean isDirectory():判断当前的目录是否存在
- boolean isFile():判断当前路径是否是一个文件
- boolean isHidden():判断当前路径是否是隐藏文件
/*
* 判断功能
* boolean exists()
* boolean isAbsolute()
* boolean isDirectory()
boolean isFile()
boolean isHidden()
*/
private static void method() {
File f = new File("a.txt");
f.createNewFile();
//boolean exists() : 判断文件或者文件夹是否存在,如果存在则返回true,否则返回false
System.out.println(f.exists());
}
private static void method2() {
File f = new File("a.txt");
File f2 = new File("d:\\a\b.txt");
//boolean isAbsolute() :判断File对象指向的路径是否是绝对路径,如果是绝对路径则返回true,否则返回false
System.out.println(f2.isAbsolute());
}
private static void method3() {
File f = new File("a.txt");
File f2 = new File("b");
//boolean isDirectory() :判断File对象指向的路径是否是文件夹,如果是则返回true,否则返回false
//boolean isFile() : 判断File对象指向的路径是否是文件,如果是则返回true,否则返回false
System.out.println(f.isDirectory());
System.out.println(f2.isDirectory());
System.out.println(f.isFile());
System.out.println(f2.isFile());
}
private static void method4() {
File f = new File("d:\\a\\b.txt");
//boolean isHidden() :判断File对象指向的路径是否有隐藏属性,如果隐藏了则返回true,否则返回false
System.out.println(f.isHidden());
}
6.File类的获取和修改名字功能
- File getAbsoluteFile():获取文件的绝对路径,返回File对象
- String getAbsolutePath():获取文件的绝对路径,返回路径的字符串
- String getParent():获取当前路径的父级路径,以字符串形式返回该父级路径
- File getParentFile():获取当前路径的父级路径,以字File对象形式返回该父级路径
- String getName():获取文件或文件夹的名称
- String getPath():获取File对象中封装的路径
- long lastModified():以毫秒值返回最后修改时间
- long length():返回文件的字节数
- boolean renameTo(File dest): 将当前File对象所指向的路径 修改为 指定File所指向的路径
/*
* 获取功能
File getAbsoluteFile()
* String getAbsolutePath()
* String getParent()
* File getParentFile()
* String getName()
* String getPath()
long lastModified()
long length()
修改功能:
boolean renameTo(File dest)
*/
private static void method1() {
File f = new File("d:\\a\\b.txt");
File f2 = new File("a.txt");
//File getAbsoluteFile() :以File对象的形式返回当前File对象所有指向的绝对路径
System.out.println(f2.getAbsoluteFile());
//String getAbsolutePath() : 返回File对象所指向的绝对路径
System.out.println(f2.getAbsolutePath());
}
private static void method2() throws IOException {
File f = new File("a.txt");
File f2 = new File("b","c.txt");
System.out.println(f2.createNewFile());
File parent = new File("b");
File f3 = new File(parent,"c.txt");
if(!parent.exists()) {
parent.mkdirs();
}
System.out.println(f3.createNewFile());
//String getParent()
System.out.println(f3.getParent());
//File getParentFile()
System.out.println(f3.getParentFile());
}
private static void method3() {
File f = new File("a.txt");
File f2 = new File("d:\\a\\b.txt");
File f3 = new File("b");
//String getName() : 获取文件和文件夹的名称
System.out.println(f.getName());
System.out.println(f2.getName());
System.out.println(f3.getName());
//String getPath() : 返回创建File对象时给的路径
System.out.println(f.getPath());
System.out.println(f2.getPath());
System.out.println(f3.getPath());
//long lastModified() : 以毫秒值的形式返回最后修改时间
System.out.println(f.lastModified());
//2514023311294
Date d = new Date(2514023311294L);
System.out.println(d.toLocaleString());
//long length() : 返回文件的字节数
System.out.println(f.length());
System.out.println(f3.length());
}
private static void method4() {
File f = new File("d.txt");
File f2 = new File("e.txt");
//boolean renameTo(File dest) : 将当前File对象所指向的路径 修改为 指定File所指向的路径
//可以进行移动文件或重命名文件
//注意:目标文件路径不能存在,如果存在则修改失败
System.out.println(f.renameTo(f2));
}
7.其它获取功能
- String[] list():以字符串数组的形式返回当前路径下所有的文件和文件夹的名称
- File[] listFiles():以File对象的形式返回当前路径下所有的文件和文件夹的名称
- static File[] listRoots():获取计算机中所有的盘符
private static void method() {
File f = new File("b");
//String[] list() : 返回当前路径下所有的文件和文件夹名称
//注意:只有指向文件夹的File对象才可以调用该方法
String[] files = f.list();
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
}
private static void method2() {
File f = new File("b");
//File[] listFiles()
File[] files = f3.listFiles();
for (File file : files) {
System.out.println(file.getName());
}
}
public static void method3() {
//static File[] listRoots() : 返回的是所有盘符
File[] files = File.listRoots();
for (File file : files) {
System.out.println(file);
}
}
8.案例:输出指定目录下所有的java文件名(包含子目录)
/*
* 需求:输出指定目录下所有的java文件名(包含子目录)
*/
public class RecurrenceTest {
public static void main(String[] args) {
File f = new File("src");
//File f = new File("src\\com\\itheima_01\\RecurrenceDemo.java");
method(f);
}
public static void method(File file) {
if(file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
//判断是否是文件对象
if(f.isFile()) {
if(f.getName().endsWith(".java")) {
System.out.println(f.getName());
}
}
else if(f.isDirectory()){
//是一个目录对象
method(f);
}
}
}
}
//输出指定目录下的所有java文件名(不包含子目录)
public static void method2(File file) {
if(file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
//判断是否是文件对象
if(f.isFile()) {
if(f.getName().endsWith(".java")) {
System.out.println(f.getName());
}
}
}
}
}
}
9.案例:删除指定的目录(包含子目录)
/*
* 需求:删除指定的目录(包含子目录)
*
* 注意:如果要删除一个目录,则需要先删除这个目录下的所有子文件和子目录
*
*/
public class RecurrenceTest2 {
public static void main(String[] args) {
File f = new File("d:\\a");
method(f);
}
//删除指定目录下所有文件和目录
public static void method(File file) {
if(file.isDirectory()) {
//干掉自己所有的子文件和子目录
//获取所有的子文件和子目录
File[] files = file.listFiles();
for (File f : files) {
if(f.isFile()) {
//直接干掉他
System.out.println(f.getName());
f.delete();
}
else if(f.isDirectory()) {
//继续查看是否还有文件和子目录
method(f);
}
}
//干掉自己
System.out.println(file.getName());
file.delete();
}
}
}