File类的每一个实例可以表示硬盘(文件系统)中的一个文件或目录(实际上表示的是一个抽象路径)
使用File可以做到:
- 1:访问其表示的文件或目录的属性信息,例如:名字,大小,修改时间等等
- 2:创建和删除文件或目录
- 3:访问一个目录中的子项
但是File不能访问文件数据.
public class FileDemo {
public static void main(String[] args) {
//使用File访问当前项目目录下的demo.txt文件
// File file = new File("c:/xxx/xxx/xx/xxx.txt");
File file = new File("./demo.txt");
//获取名字
String name = file.getName();
System.out.println(name);
//获取文件大小(单位是字节)
long len = file.length();
System.out.println(len+"字节");
//是否可读可写
boolean cr = file.canRead();
boolean cw = file.canWrite();
System.out.println("是否可读:"+cr);
System.out.println("是否可写:"+cw);
//是否隐藏
boolean ih = file.isHidden();
System.out.println("是否隐藏:"+ih);
}
}
创建一个新文件
createNewFile()方法,可以创建一个新文件
package file;
import java.io.File;
import java.io.IOException;
public class CreateNewFileDemo {
public static void main(String[] args) throws IOException {
//在当前目录下新建一个文件:test.txt
File file = new File("./test.txt");
//boolean exists()判断当前File表示的位置是否已经实际存在该文件或目录
if(file.exists()){
System.out.println("该文件已存在!");
}else{
file.createNewFile();//将File表示的文件创建出来
System.out.println("文件已创建!");
}
}
}
删除一个文件
delete()方法可以将File表示的文件删除
package file;
import java.io.File;
public class DeleteFileDemo {
public static void main(String[] args) {
//将当前目录下的test.txt文件删除
File file = new File("test.txt");
if(file.exists()){
file.delete();
System.out.println("文件已删除!");
}else{
System.out.println("文件不存在!");
}
}
}
创建目录
mkDir():创建当前File表示的目录
mkDirs():创建当前File表示的目录,同时将所有不存在的父目录一同创建
package file;
import java.io.File;
public class MkDirDemo {
public static void main(String[] args) {
//在当前目录下新建一个目录:demo
// File dir = new File("demo");
File dir = new File("./a/b/c/d/e/f");
if(dir.exists()){
System.out.println("该目录已存在!");
}else{
// dir.mkdir();//创建目录时要求所在的目录必须存在
dir.mkdirs();//创建目录时会将路径上所有不存在的目录一同创建
System.out.println("目录已创建!");
}
}
}
删除目录
delete()方法可以删除一个目录,但是只能删除空目录。
package file;
import java.io.File;
public class DeleteDirDemo {
public static void main(String[] args) {
//将当前目录下的demo目录删除
File dir = new File("demo");
// File dir = new File("a");
if(dir.exists()){
dir.delete();//delete方法删除目录时只能删除空目录
System.out.println("目录已删除!");
}else{
System.out.println("目录不存在!");
}
}
}
访问一个目录中的所有子项
listFiles方法可以访问一个目录中的所有子项
package file;
import java.io.File;
public class ListFilesDemo1 {
public static void main(String[] args) {
//获取当前目录中的所有子项
File dir = new File(".");
if(dir.isDirectory()){
File[] subs = dir.listFiles();
System.out.println("当前目录包含"+subs.length+"个子项");
for(int i=0;i
获取目录中符合特定条件的子项
重载的listFiles方法:File[] listFiles(FileFilter)
该方法要求传入一个文件过滤器,并仅将满足该过滤器要求的子项返回。
package file;
import java.io.File;
import java.io.FileFilter;
public class ListFilesDemo2 {
public static void main(String[] args) {
File dir = new File(".");
if(dir.isDirectory()){
// FileFilter filter = new FileFilter(){//匿名内部类创建过滤器
// public boolean accept(File file) {
// String name = file.getName();
// boolean starts = name.startsWith(".");//名字是否以"."开始
// System.out.println("过滤器过滤:"+name+",是否符合要求:"+starts);
// return starts;
// }
// };
// File[] subs = dir.listFiles(filter);//方法内部会调用accept方法
File[] subs = dir.listFiles(new FileFilter(){
public boolean accept(File file) {
return file.getName().startsWith(".");
}
});
System.out.println(subs.length);
}
}
}
Lambda表达式
JDK8之后,java支持了lambda表达式这个特性.
- lambda可以用更精简的代码创建匿名内部类.但是该匿名内部类实现的接口只能有一个抽象方法,否则无法使用!
- lambda表达式是编译器认可的,最终会将其改为内部类编译到class文件中
package lambda;
import java.io.File;
import java.io.FileFilter;
public class LambdaDemo {
public static void main(String[] args) {
//匿名内部类形式创建FileFilter
FileFilter filter = new FileFilter() {
public boolean accept(File file) {
return file.getName().startsWith(".");
}
};
FileFilter filter2 = (File file)->{
return file.getName().startsWith(".");
};
//lambda表达式中参数的类型可以忽略不写
FileFilter filter3 = (file)->{
return file.getName().startsWith(".");
};
FileFilter filter4 = (file)->file.getName().startsWith(".");
}
}
总结:
File类
File类的每一个实例可以表示硬盘(文件系统)中的一个文件或目录(实际上表示的是一个抽象路径)
使用File可以做到:
- 1:访问其表示的文件或目录的属性信息,例如:名字,大小,修改时间等等
- 2:创建和删除文件或目录
- 3:访问一个目录中的子项
常用构造器:
- File(String pathname)
- File(File parent,String name)可参考文档了解
常用方法:
- length():返回一个long值,表示占用的磁盘空间,单位为字节。
- canRead():File表示的文件或目录是否可读
- canWrite():File表示的文件或目录是否可写
- isHidden():File表示的文件或目录是否为隐藏的
- createNewFile():创建一个新文件,如果指定的文件所在的目录不存在会抛出异常java.io.FileNotFoundException
- mkdir:创建一个目录
- mkdirs:创建一个目录,并且会将所有不存在的父目录一同创建出来,推荐使用。
- delete():删除当前文件或目录,如果目录不是空的则删除失败。
- exists():判断File表示的文件或目录是否真实存在。true:存在 false:不存在
- isFile():判断当前File表示的是否为一个文件。
- isDirectory():判断当前File表示的是否为一个目录
- listFiles():获取File表示的目录中的所有子项
- listFiles(FileFilter filter):获取File表示的目录中满足filter过滤器要求的所有子项
代码
创建文件
package file;
import java.io.File;
import java.io.IOException;
public class CreateNewFileDemo {
public static void main(String[] args) throws IOException {
//在当前目录下新建一个文件:test.txt
File file = new File("test.txt");
boolean exists = file.exists();//判断当前File表示或目录是否真是存在
if (exists){
System.out.println("该文件已经存在!");
}else {
file.createNewFile();//创建他
}
}
}
删除文件
package file;
import java.io.File;
public class DeleteFileDemo {
public static void main(String[] args) {
//将当前目录下的文件test.txt删除
File file = new File("/text.txt");
if (file.exists()){//如果该文件存在
file.delete();
System.out.println("文件已删除");
}else{
System.out.println("该文件不存在");
}
}
}
创建目录
package file;
import java.io.File;
public class MkdirDemo {
public static void main(String[] args) {
//在当前目录下新建一个目录:demo
// File dir = new File("./demo");
File dir = new File("./a/b/c/e/f/demo");
if (dir.exists()){
System.out.println("该目录已存在");
}else {
// dir.mkdir();//将该目录创建出来
dir.mkdirs();//将该目录创建出来
System.out.println("目录已创建");
}
}
}
删除目录
package file;
import java.io.File;
public class DeleteDirDemo {
public static void main(String[] args) {
//当前目录下得demo目录删除
// File file = new File("./demo");
File file =new File("./a");
if (file.exists()){
file.delete();
System.out.println("目录已删除");
}else {
System.out.println("该目录不存在");
}
创建100个文件加删除
package file;
import java.io.File;
public class Demo1 {
public static void main(String[] args) {
for (int i=1;i<=100;i++){
File file = new File("./text"+i+".txt");
//if(!file.exists()){//如果不存在
// file.createNewFile();
// }
if (file.exists()){//如果文件存在
file.delete();
}
//System.out.println("创建完毕");
System.out.println("删除完毕");
}
}
}
访问文件
package file;
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
//访问当前项目下的demo.txt文件
// D:/Robin/jsd2203_se/demo.txt
// File file = new File("D:/Robin/jsd2203_se/demo.txt");
File file = new File("./demo.txt");
String name = file.getName();
System.out.println(name);
long len = file.length();
System.out.println(len);
boolean cr = file.canRead();//是否可读
boolean cw = file.canWrite();//判断是否可写
System.out.println("是否可读"+cr);
System.out.println("是否可写"+cw);
boolean ih = file.isHidden();
System.out.println("是否隐蔽:"+ih);//是否隐蔽
}
}
使用过虑器
package file;
import java.io.File;
import java.io.FileFilter;
public class ListFilesDemo2 {
public static void main(String[] args) {
//获取当前目录下名字中含有字母"s"的所有子项
File dir = new File(".");
if (dir.isDirectory()){
FileFilter filter = new FileFilter() {
public boolean accept(File file) {
String name = file.getName();//获取该文件或目录的名字
// int index = name.indexOf("s");
// return index>=0;
//字符串支持boolean contains(String str),用于判断当前字符串是否包含参数指定的内容
return name.contains("s");
}
};
//将过滤器插到listFiles方法中,将每个子项都经过一次过滤器并返回符合要求的。
File[] subs = dir.listFiles(filter);
System.out.println(subs.length);
for (int i=0;i<=subs.length;i++){
File sub = subs[i];
System.out.println(sub.getName());
}
}
}
}
查看时间
package file;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String[] args) {
long start =System.currentTimeMillis();//获取当前系统时间的毫秒值
System.out.println(start);
long l =1651031076964l;
Date date =new Date(l);//日期
System.out.println(date);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String line = sdf.format(date);
System.out.println(line);
}
}



