Java中的File类
1.File类的静态成员变量:
1.static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
2.static char pathSeparatorChar 与系统有关的路径分隔符。
3.static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
4.static char separatorChar 与系统有关的默认名称分隔符。
import java.io.File; public class FileDemo { public static void main(String[] args) { String s1 = File.pathSeparator; System.out.println(s1);//打印结果为 ; 在linux中是: String s2 = File.separator; System.out.println(s2);//打印结果为 \ 如果是Linux系统则为 / } }
2.File类的构造方法:
在同一个案例中演示这三个构造方法:
import java.io.File; public class FileDemo { public static void main(String[] args) { String pathName = "e:\\java_code\\day22e\\hello.java"; File f1 = new File(pathName);//将Test22文件封装成File对象。注意;有可以封装不存在文件或者文件夹,变成对象。 System.out.println(f1); File f2 = new File("e:\\java_code\\day22e","hello.java"); System.out.println(f2); //将parent封装成file对象。 File dir = new File("e:\\java_code\\day22e"); File f3 = new File(dir,"hello.java"); System.out.println(f3); } } //输出的都是e:\\java_code\\day22e\\hello.java
3.java API中介绍的方法:(常用的标上了颜色)
- boolean canExecute()测试应用程序是否可以执行此抽象路径名表示的文件。
- boolean canRead()测试应用程序是否可以读取此抽象路径名表示的文件。
- boolean canWrite()测试应用程序是否可以修改此抽象路径名表示的文件。
- int compareTo(File pathname)按字母顺序比较两个抽象路径名。
- boolean createNewFile()当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
- static File createTempFile(String prefix, String suffix)在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。
- static File createTempFile(String prefix, String suffix, File directory)在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
- boolean delete()删除此抽象路径名表示的文件或目录。//注意:这个删除,不走回收站,直接删除,所以要小心使用。
- void deleteOnExit()在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
- boolean equals(Object obj)测试此抽象路径名与给定对象是否相等。
- boolean exists()测试此抽象路径名表示的文件或目录是否存在。
- File getAbsoluteFile()返回此抽象路径名的绝对路径名形式。
- String getAbsolutePath()返回此抽象路径名的绝对路径名字符串。
- File getCanonicalFile()返回此抽象路径名的规范形式。
- String getCanonicalPath()返回此抽象路径名的规范路径名字符串。
- long getFreeSpace()返回此抽象路径名指定的分区中未分配的字节数。
- String getName()返回由此抽象路径名表示的文件或目录的名称。
- String getParent()返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
- File getParentFile()返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
- String getPath()将此抽象路径名转换为一个路径名字符串。
- long getTotalSpace()返回此抽象路径名指定的分区大小。
- long getUsableSpace()返回此抽象路径名指定的分区上可用于此虚拟机的字节数。
- int hashCode()计算此抽象路径名的哈希码。
- boolean isAbsolute()测试此抽象路径名是否为绝对路径名。
- boolean isDirectory()测试此抽象路径名表示的文件是否是一个目录。
- boolean isFile()测试此抽象路径名表示的文件是否是一个标准文件。
- boolean isHidden()测试此抽象路径名指定的文件是否是一个隐藏文件。
- long lastModified()返回此抽象路径名表示的文件最后一次被修改的时间。
- long length()返回由此抽象路径名表示的文件的长度。字节数
- String[] list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。//遍历目录返回的只有名字
- String[] list(FilenameFilter filter)返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
- File[] listFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。//返回路径全名 推荐
- File[] listFiles(FileFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
- File[] listFiles(FilenameFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
- static File[] listRoots()列出可用的文件系统根。
- boolean mkdir()创建此抽象路径名指定的目录。调用该方法时,File对象必须对应一个路径,而不是文件//只能创建一个目录
- boolean mkdirs()创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。//即可创建一个目录,也可创建多及目录,推荐
- boolean renameTo(File dest)重新命名此抽象路径名表示的文件。
- boolean setExecutable(boolean executable)设置此抽象路径名所有者执行权限的一个便捷方法。
- boolean setExecutable(boolean executable, boolean ownerOnly)设置此抽象路径名的所有者或所有用户的执行权限。
- boolean setLastModified(long time)设置此抽象路径名指定的文件或目录的最后一次修改时间。
- boolean setReadable(boolean readable)设置此抽象路径名所有者读权限的一个便捷方法。
- boolean setReadable(boolean readable, boolean ownerOnly)设置此抽象路径名的所有者或所有用户的读权限。
- boolean setReadOnly()标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。
- boolean setWritable(boolean writable)设置此抽象路径名所有者写权限的一个便捷方法。
- boolean setWritable(boolean writable, boolean ownerOnly)设置此抽象路径名的所有者或所有用户的写权限。
- String toString()返回此抽象路径名的路径名字符串。
- URI toURI()构造一个表示此抽象路径名的 file: URI。
- URL toURL()已过时。 此方法不会自动转义 URL 中的非法字符。建议新的代码使用以下方式将抽象路径名转换为 URL:首先通过 toURI 方法将其转换为 URI,然后通过 URI.toURL 方法将 URI 装换为 URL。
下面介绍几个常用的方法:
import java.io.File; public class FileDemo { public static void main(String[] args) { //创建文件对象 File file = new File("Test22.java");//创建文件对象,将其封装成file类对象,就可以调用file类的方法了 String absPath1 = file.getAbsolutePath();//获取文件的绝对路径,即全路径 返回的是String对象 File absPath2 = file.getAbsoluteFile();//获取文件的绝对路径,即全路径 返回的是File对象 String path = file.getPath();//File中封装的路径是什么获取到的就是什么。 String filename = file.getName();//获取文件名称 long size = file.length();//获取文件大小 System.out.println("absPath1="+absPath1); System.out.println("absPath2="+absPath2); System.out.println("path="+path); System.out.println("filename="+filename); System.out.println("size="+size); } }
import java.io.File; import java.io.IOException; public class FileDemo { public static void main(String[] args) throws IOException { File file = new File("d:\\file.java"); boolean b = file.createNewFile(); System.out.println(b);//输出为true,说明我的D盘下没有file.java文件 ,他已经自动帮我创建了一个如下图 } }
listFiles()方法介绍
public class FileMethodDemo3 { public static void main(String[] args) { File dir = new File("e:\\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,指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException
4.文件过滤器
l 测试类
public class FileDemo2 { public static void main(String[] args) { //获取扩展名为.java所有文件 //创建File对象 File file = new File("E:\\code\\day11_code"); //获取指定扩展名的文件,由于要对所有文件进行扩展名筛选,因此调用方法需要传递过滤器 File[] files = file.listFiles(new MyFileFilter()); //遍历获取到的所有符合条件的文件 for (File f : files) { System.out.println(f); } } }
l 自定类继承FilenameFilter过滤器接口
//定义类实现文件名称FilenameFilter过滤器 class MyFileFilter implements FilenameFilter{ public boolean accept(File dir, String name) { return name.endsWith(".java"); } }
在查阅API时,我们发现,在listFiles(FileFilter filter) 也可以接受一个FileFilter过滤器,它和我们讲的FilenameFilter有啥区别呢?
FilenameFilter过滤器中的accept方法接受两个参数,一个当前文件或文件夹所在的路径,一个是当前文件或文件夹对象的名称。
FileFilter 过滤器中的accept方法接受一个参数,这个参数就当前文件或文件夹对象
当我们需要过滤文件名称时就可以使用FilenameFilter这个过滤器,当我们想对当前文件或文件夹进行过滤,就可以使用FileFilter ,比如需要当前目录下的所有文件夹,就可以使用FileFilter 过滤器。
l 测试类
public class FileDemo2 { public static void main(String[] args) { //获取扩展名为.java所有文件 //创建File对象 File file = new File("E:\\code\\day11_code"); //获取指定目录下的文件夹 File[] files = file.listFiles(new FileFileterByDir()); //遍历获取到的所有符合条件的文件 for (File f : files) { System.out.println(f); } } }
//自定义类继承FileFilter过滤器接口
//文件过滤器 class FileFileterByDir implements FileFilter{ public boolean accept(File pathname) { return pathname.isDirectory(); } }