File类
java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
static char pathSeparatorChar 与系统有关的路径分隔符。
static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
static char separatorChar 与系统有关的默认名称分隔符。
1 2 3 4 5
| String pathSeparator = File.pathSeparator; System.out.println(pathSeparator);
String separator = File.separator; System.out.println(separator);
|
Java的文件路径怎么写
Java中文件路径可以使用正斜杠“/”和反斜杠“\”,但是反斜杠需要进行转义,写成“\”才能够被识别。
1 2 3
| C:\develop\a\a.txt C:/develop/a/a.txt //linux "C:"+File.separator+"develop"+File.separator+"a"+File.separator+"a.txt"
|
构造方法
public File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child):从父抽象路径名和子路径名字符串创建新的 File实例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| String pathname = "D:\\aaa.txt"; File file1 = new File(pathname);
String parent = "d:\\aaa"; String child = "bbb.txt"; File file3 = new File(parent, child);
File parentDir = new File("d:\\aaa"); String child = "bbb.txt"; File file4 = new File(parentDir, child);
File f1 = new File("a.txt"); if(!f1.exists()){ f1.createNewFile(); }
|
- 一个File对象代表硬盘中实际存在的一个文件或者目录
- 无论该路径下是否存在文件或者目录,都不影响File对象的创建
获取路径和名称
public String getAbsolutePath() :返回此File的绝对路径名字符串
public String getPath() :将此File转换为路径名字符串
public String getName() :返回由此File表示的文件或目录的名称
public long length() :返回由此File表示的文件的长度
1 2 3 4 5 6 7 8 9 10
| public class FileGet { public static void main(String[] args) { File f = new File("d:/aaa/bbb.java"); System.out.println("文件绝对路径:"+f.getAbsolutePath()); System.out.println("文件构造路径:"+f.getPath()); System.out.println("文件名称:"+f.getName()); System.out.println("文件长度:"+f.length()+"字节");
} }
|
绝对路径和相对路径
绝对路径:从盘符开始的路径,这是一个完整的路径
相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。
1 2 3 4 5 6 7 8 9 10 11
| public class FilePath { public static void main(String[] args) { File f = new File("D:\\bbb.java"); System.out.println(f.getAbsolutePath());
File f2 = new File("bbb.java"); System.out.println(f2.getAbsolutePath()); } }
|
判断功能
**public boolean exists()**:此File表示的文件或目录是否实际存在。
public boolean isDirectory() :此File表示的是否为目录。
**public boolean isFile()**:此File表示的是否为文件。
1 2 3 4 5 6 7 8 9 10 11 12
| public class FileIs { public static void main(String[] args) { File f = new File("d:\\aaa\\bbb.java"); File f2 = new File("d:\\aaa"); System.out.println("d:\\aaa\\bbb.java 是否存在:"+f.exists()); System.out.println("d:\\aaa 是否存在:"+f2.exists()); System.out.println("d:\\aaa 文件?:"+f2.isFile()); System.out.println("d:\\aaa 目录?:"+f2.isDirectory()); } }
|
创建和删除
**public boolean createNewFile()**:当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
**public boolean delete()**:删除由此File表示的文件或目录。
- 如果 file 表示一个文件,那么 delete 方法将尝试删除该文件。如果成功删除,则返回 true;否则,返回 false。
- 如果 file 表示一个目录,那么 delete 方法将尝试删除该目录。要成功删除目录,该目录必须为空。如果目录删除成功,则返回 true;否则,返回 false。
**public boolean mkdir()**:创建由此File表示的目录。如果上级目录不存在,或者上级目录不可写,那么 mkdir 方法将失败并抛出一个 SecurityException 异常。
**public boolean mkdirs()**:创建由此File表示的目录,包括任何必需但不存在的父目录。如果上级目录不存在,mkdirs 方法会尝试递归创建所有不存在的父目录。如果创建成功,则返回 true,否则返回 false。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| File f = new File("aaa.txt"); System.out.println("是否存在:"+f.exists()); System.out.println("是否创建:"+f.createNewFile()); System.out.println("是否存在:"+f.exists());
File f2= new File("newDir"); System.out.println("是否存在:"+f2.exists()); System.out.println("是否创建:"+f2.mkdir()); System.out.println("是否存在:"+f2.exists());
File f3= new File("newDira\\newDirb"); System.out.println(f3.mkdir()); File f4= new File("newDira\\newDirb"); System.out.println(f4.mkdirs());
System.out.println(f.delete());
System.out.println(f2.delete()); System.out.println(f4.delete());
|
目录的遍历
public String[] list():返回一个String数组,表示该File目录中的所有子文件或目录。
public File[] listFiles():返回一个File数组,表示该File目录中的所有的子文件或目录。
注意:
- list方法和listFiles方法遍历的是构造方法中给出的目录
- 如果构造方法中给出的目录的路径不存在,会抛出空指针异常
- 如果构造方法中给出的路径不是一个目录,也会抛出空指针异常
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class FileFor { public static void main(String[] args) { File dir = new File("d:\\java_code"); String[] names = dir.list(); for(String name : names){ System.out.println(name); } File[] files = dir.listFiles(); for (File file : files) { System.out.println(file); } } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| public class Demo04Recurison { public static void main(String[] args) { File file = new File("c:\\Game"); getAllFile(file); }
public static void getAllFile(File dir){ System.out.println(dir); File[] files = dir.listFiles(); for (File f : files) { if(f.isDirectory()){ getAllFile(f); }else{ System.out.println(f); } } } }
|
过滤器实现
File[] listFiles(FileFilter filter) :这个方法用于返回表示目录中满足指定过滤器条件的文件和目录的数组。
java.io.FileFilter接口用于抽象路径名(File对象)的过滤器。
FileFilter接口中的抽象方法
boolean accept(File pathname) :其中 pathname
是文件或目录的 File
对象。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public class FileFilterImpl implements FileFilter{ @Override public boolean accept(File pathname) {
if(pathname.isDirectory()){ return true; } return pathname.getName().toLowerCase().endsWith(".java"); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public class Demo01Filter { public static void main(String[] args) { File file = new File("c:\\abc"); getAllFile(file); }
public static void getAllFile(File dir){ File[] files = dir.listFiles(new FileFilterImpl()); for (File f : files) { if(f.isDirectory()){ getAllFile(f); }else{ System.out.println(f); } } } }
|
File[] listFiles(FilenameFilter filter):用于返回表示目录中满足指定文件名过滤器条件的文件和目录的数组。
FilenameFilter接口抽象方法
boolean accept(File dir, String name) :其中 dir
是当前目录的 File
对象,name
是文件或目录的名称
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| class Demo02Filter { public static void main(String[] args) { File file = new File("c:\\abc"); getAllFile(file); }
public static void getAllFile(File dir){ File[] files = dir.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return new File(dir,name).isDirectory() || name.toLowerCase().endsWith(".java"); } });
for (File f : files) { if(f.isDirectory()){ getAllFile(f); }else{ System.out.println(f); } } } }
|