File类
File类来自java.io.file包下,此包是java.long.Object包的
public class Fileextends Objectimplements Serializable, Comparable< File>
File类:表示文件或者目录的路径的抽象表现形式. IO流就是对文件进行操作的 。
构造方法摘要
public File(String pathname):表示pathname的抽象路径表现的形式 (开发中使用这种方式)public File(String parent,String child):根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例
public File(File parent, String child):根据一个file对象和一个文件路径来构造File实例
创建一个实例后,打印这个实例即打印的是这个File实例的全路径。
下面是我们创建一个实例,这个实例指向D:\\programma\\test.txt,但是并不真正的创建这个文本文件,可以理解为只是创建了一个指向这个地址的指针,我们对创建出来的对象进行操作才可真正的在电脑上产生可以看见的文本文件。
创建文件对象的例子:
import java.io.File; public class Test1 { public static void main(String[] args) { //三种方式创建File的实例 File file = new File("D:\\programma\\test.txt"); File file2 = new File("D:\\programma", "test.txt"); File file3 = new File("D:\\programma") ; File file4 = new File(file3, "test.txt"); } }
结果:
方法摘要
创建文件、创建目录、创建目录(顺带创建父目录)
public boolean createNewFile():创建文件,当文件不存在的时候,创建此抽象路径下的文件public boolean mkdir(): 创建此抽象路径名指定的目录。如果目录存在,不创建
public boolean mkdirs():创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
创建之前
执行以下代码:
public static void main(String[] args) throws IOException { //三种方式创建File的实例 File file = new File("D:\\programma\\test.txt"); File file2 = new File("D:\\programma", "test.txt"); File file3 = new File("D:\\programma") ; File file4 = new File(file3, "test.txt"); File file5 = new File("D:\\programma\\newdir") ; File file6 = new File("D:\\programma\\newdirs\\newdirnew") ; System.out.println(file); System.out.println(file2); System.out.println(file4); boolean createnewfile = file.createNewFile(); boolean mkdir = file5.mkdir(); boolean mkdirs = file6.mkdirs(); System.out.println("创建文本成功?"+ createnewfile); System.out.println("创建文件夹成功?" + mkdir); System.out.println("自动创建根目录成功?"+ mkdirs); }
结果是:
从返回值来看,我们完成了在D:programma目录中创建test.txt文本文件、创建newdir目录、以及创建newdirs\newdirnew目录,那么看一下创建的结果。
可以看见创建成功。那么我们再来运行一次,看一下结果:
可以看出,我们创建文件和目录的时候,一旦文件目录已经存在,那么无法再继续创建。方法返回false。
删除功能
public boolean delete() :删除文件或者文件夹(目录不能是空的)
代码:
boolean delete = file.delete(); System.out.println("删除file对象的txt文件成功?"+ delete); boolean delete2 = file5.delete(); System.out.println("删除file5对象的目录成功?" + delete2); boolean delete3 = file6.delete(); System.out.println("删除file6对象的目录嵌套成功?"+ delete3);
结果:
但是我们看一下programma目录:
可以看到,newdirs这个newdirnew的上一层目录并没有删掉,删掉的只是newdirnew这个我们创建的目录,这里的true就是这个意思,我们需要注意,如果需要删除newdirs这个文件夹,还需要逐层删除!
重命名
public boolean renameTo(File dest)重新命名此抽象路径名表示的文件。
代码:
//重命名 boolean renameTo = file.renameTo(file6) ;//用目录名重命名文件名 System.out.println(renameTo);//false File newFileName = new File("D:\\programma\\newname.txt") ; boolean renameTo1 = file.renameTo(newFileName) ; System.out.println(renameTo1);注意:重命名方法的参数为File型的参数,所以在重命名的时候我们需要先创建一个我们需要修改的名称的对象,这个对象的的路径必须与被修改文件同目录,否则会改名失败!
结果:
File的判断功能
public boolean isDirectory():判断是否是文件夹public boolean isFile() :判断是否是文件
public boolean canRead(): 是否可读
public boolean canWriter():是否可写
public boolean exists() :是否存在
public boolean isHidden():是否是隐藏文件
例子:
太简单了,不想写例子,若果以后看的时候不懂,就可以去死了。 我们创建的文件一般是可读、可写、非隐藏的。这句话好像是语句废话。
File获取功能
public String getAbsolutePath():获取抽象文件的绝对路径public String getPath():获取相对路径的字符串
public String getName()返回由此抽象路径名表示的文件或目录的名称
public long length()返回由此抽象路径名表示的文件的长度。
public long lastModified():文件最后一次被修改的时间(时间毫秒值)
代码:
public static void main(String[] args) throws IOException { File file = new File("a.txt") ; File dir = new File("") ; String absolutePath = file.getAbsolutePath(); String path = file.getPath(); String name = file.getName(); long length = file.length(); long lastModified = file.lastModified(); file.createNewFile(); System.out.println("file是文件吗?"+file.isFile()+"" + "\nfile文件存在吗?"+ file.exists()); System.out.println("file文件的绝对路径:"+ absolutePath); System.out.println("相对路径:"+ path); System.out.println("文件名称:"+ name); System.out.println("长度:"+ length); System.out.println("最后修改时间:"+lastModified); }
高级获取功能
public String[] list() :获取当前某个路径下的所有的文件夹以及文件名称的字符串数组
public File[] listFiles() :获取当前某个路径下所有的文件夹以及文件的File数组
String[] |
list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。 |
public static void main(String[] args) { File file = new File("D:\\programma\\JAVA") ; //以字符串数组的形式获取file目录下的所有文件 String[] stringfile = file.list(); for(String s : stringfile) { System.out.println(s);//这个会得到文件(夹)名的字符串 } //以文件的形式获取file目录下的所有文件 File[] listFiles = file.listFiles(); for(File f : listFiles) { System.out.println(f);//这个会得到文件的全路径名 } }
这是一个测试例子:
/** * 判断目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称 * * @author malaganguo * */ public class Test { public static void main(String[] args) { File file = new File("F:\\图片"); String[] list = file.list(); if (list != null) { for (String l : list) { if(l.endsWith(".jpg")) { System.out.println(l); } } } } }
结果:
import java.io.File; import java.io.FilenameFilter; /** * 文件过滤器获取指定格式文件 */ public class Test1 { public static void main(String[] args) { File file = new File("F:\\图片") ; String[] str = file.list(new FilenameFilter() { //测试指定文件是否应该包含在某一文件列表中 @Override public boolean accept(File dir, String name) { return new File(dir,name).isFile() && name.endsWith(".jpg"); } }); for(String s : str ) { System.out.println(s); } } }