File类
File类:文件和目录路径名的抽象表示形式。(不仅包括文件还包括目录)
相同路径下文件和文件夹不能同名。
构造方法:
只是创建了一个实例,并没有生成文件或文件夹。构造方法中只是声明了一个文件或文件夹的名字,真正创建的是文件还是文件夹取决于调用的方法。createNewFile()创建的是文件,mkdir()创建的是文件夹。
public File(String pathname):通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例(文件或路径)。
public File(String parent,Stringchild)根据 parent 路径名字符串和 child路径名字符串创建一个新 File 实例。
public File(File parent,Stringchild)根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
主要方法:
public boolean createNewFile() throwsIOException:创建的是文件。如果指定的文件不存在并成功创建,则返回true,如果指定的文件已经存在,则返回false。如果创建的文件的父目录不存在,抛出IO异常:系统找不到指定的路径。
public boolean mkdir():创建此抽象路径名指定的目录(文件夹)。当且仅当已创建目录时,返回true,否则返回false。如果创建的文件的父目录不存在,会报错,但不会抛出异常。
public boolean mkdirs():创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。(父目录不存在时,连同父目录一起创建)
public boolean delete():删除此抽象路径名表示的文件或目录。当删除文件夹时,如果文件夹中有内容,删除失败。
public boolean isDirectory():测试此抽象路径名表示的文件是否是一个目录。
public boolean isFile():测试此抽象路径名表示的文件是否是一个标准文件。
public boolean exists():测试此抽象路径名表示的文件或目录是否存在。
public boolean renameTo(File dest):重新命名此抽象路径名表示的文件。
public File getAbsoluteFile():返回此抽象路径名的绝对路径名形式。
public String getPath():返回此抽象路径名的字符串形式。
public String getParent():返回此抽象路径名指定父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。
public File getParentFile():返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回null。 与getParent返回值内容一样。
public String getName():返回由此抽象路径名表示的文件或目录的名称。
public long length():返回由此抽象路径名表示的文件的长度,以字节为单位。(GBK编码中一个中文汉字占2个字节,Unicode编码中一个汉字占3个字节)
public long lastModified():返回此抽象路径名表示的文件最后一次被修改的时间。返回的是与1970相差的毫秒数。
public static File[] listRoots():列出可用的文件系统根。
public String[] list():返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
public File[] listFiles():返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。如果此抽象路径名不表示一个目录,那么此方法将返回 null。否则返回一个 File 对象数组,每个数组元素对应目录中的每个文件或目录。(返回指定目录下一层的文件和文件夹的路径,路径从调用该方法的对象位置写起)
public File[] listFiles(FilenameFilter filter):返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。传入的参数是文件名过滤器。FilenameFilter是一个接口,可以通过匿名内部类实现接口。
代码示例:
package file;
import java.io.File;
import java.io.IOException;
public class Lianxi1 {
public static voidmain(String[] args) throws IOException {
//第一种构造方法: File(String pathname)
File f = newFile("src/a.txt");
System.out.println(f.createNewFile());//首次运行文件不存在返回true,并创建文件
File f1 = newFile("src/a");
System.out.println(f1.mkdir());//创建目录(文件夹)
File f2 = newFile("a/b");
//System.out.println(f2.createNewFile());//父目录不存在,抛出IO异常:系统找不到指定的路径
System.out.println(f2.mkdir());//父目录不存在时,返回false,但不会报错。
File f6 = newFile("../abc");
System.out.println(f6.mkdir());
//第二种构造方法:File(String parent,String child)
File f3 = newFile("src/a","c");
System.out.println(f3.mkdir());
File f5 = newFile("src/a","e");
System.out.println(f5.createNewFile());
//第三种构造方法
File f4 = newFile(f3,"d");
System.out.println(f4.createNewFile());
}
}
package file;
import java.io.File;
import java.io.IOException;
public class Lianxi2 {
public static voidmain(String[] args) throws IOException {
File f1 = newFile("a/b","c");
System.out.println(f1.mkdirs());//父目录不存在时,连同父目录一起创建
File f2 = newFile(f1,"d");
System.out.println(f2.createNewFile());
System.out.println(f1.delete());//删除时,只删除本目录,不会删除父目录。如果目录中有内容,删除失败。
System.out.println(f1.isDirectory());//true
System.out.println(f2.isDirectory());//false
System.out.println(f1.isFile());//false
System.out.println(f2.isFile());//true
System.out.println(f1.exists());//true
File f3 = newFile("e","f");
System.out.println(f3.exists());//false
}
}
package file;
import java.io.File;
public class Lianxi3 {
public static voidmain(String[] args) {
File f1 = newFile("x/y","z");
f1.mkdirs();
//File f2 = newFile("mm");
//f1.renameTo(f2); //如果传入的File对象的路径和原路径不同,就会连同路径和名字一起修改。(相当于剪切同时重命名)
File f3 = newFile("x/y","w");
f1.renameTo(f3);//如果传入的File对象的路径和原路径相同,就只修改名字
}
}
package file;
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Lianxi4 {
public static voidmain(String[] args) throws IOException {
File f1 = newFile("o/p","q");
File f2 = newFile("E:\\Program Files (x86)","q");
System.out.println(f1.getAbsoluteFile());//C:\Users\Administrator\workspace\filelianxi\o\p\q
System.out.println(f2.getAbsoluteFile());//E:\ProgramFiles (x86)\q
System.out.println(f1.getPath());//o\p\q
System.out.println(f2.getPath());//E:\Program Files (x86)\q
System.out.println(f1.getParent());//o\p
System.out.println(f2.getParent());//E:\Program Files (x86)
System.out.println(f1.getParentFile());//o\p
System.out.println(f2.getParentFile());//E:\Program Files (x86)
f2.createNewFile();
f1.mkdir();
System.out.println(f1.getName());//q(目录名)
System.out.println(f2.getName());//q(文件名)
File f4 = new File("a/b/c/d");
System.out.println(f4.length());//13
System.out.println(f4.lastModified());//1525680441260
//将最后修改时间格式化为直观的日期格式
Date d = new Date(1525680441260L);//默认整数类型是int,当前传入值是long类型,需要在末尾加上l或L
DateFormat df = newSimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
System.out.println(df.format(d));//2018年05月07日 16:07:21
}
}
package file;
import java.io.File;
import java.util.Arrays;
public class Lianxi5 {
public static voidmain(String[] args) {
File [] f =File.listRoots();//返回File类型数组
System.out.println(Arrays.toString(f));//[C:\,D:\, E:\, F:\, G:\]
File f1 = newFile("./");//表示当前项目根目录
String [] s =f1.list();
System.out.println(Arrays.toString(s));//[.classpath, .project, .settings,a, bin, src, x]
File [] f2 =f1.listFiles();
System.out.println(Arrays.toString(f2));//[.\.classpath, .\.project,.\.settings, .\a, .\aaa, .\bin, .\src, .\x]
File f3 = newFile("src");//表示当前项目根目录
String [] s1 =f3.list();
System.out.println(Arrays.toString(s1));//[a, a.txt, file]
File [] f4 =f3.listFiles();
System.out.println(Arrays.toString(f4));//[src\a, src\a.txt, src\file]
}
}
package file;
import java.io.File;
public class Lianxi6 {
public static voidmain(String[] args) {
//获取file中所有java文件,因为需要对文件名进行判断,可以通过获取到File对象调用getName方法,所以用listFiles()方法,这样返回的数组是File对象。
File f = newFile("src/file");
File [] f1 =f.listFiles();//获取file目录下的File对象抽象路径名数组
for(int i = 0;i<f1.length;i++){
if(f1[i].isFile()){//判断数组中的是文件还是目录
String name =f1[i].getName();//如果是文件,获取文件名
if(name.endsWith(".java")){//判断文件名是否以.java结尾
System.out.println(name);
}
}
}
}
}
package file;
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
public class Lianxi7 {
//输出file文件夹下的所有java文件
public static voidmain(String[] args) {
File f = newFile("./src/file");
File [] f1 =f.listFiles(new FilenameFilter(){//匿名内部类实现接口
public booleanaccept(File dir, String name) {//重写accept方法
File f2 = newFile(dir,name);//创建实例
if(f2.isFile()){//判断是否是文件
if(name.endsWith(".java")){//判断是否以.java结尾
returntrue;//将.java文件添加到数组中
}
returnfalse;
}
return false;
}
});
System.out.println(Arrays.toString(f1));
}
}
生成的项目文件夹展示: