JavaSE常用类之File类
- 2022 年 4 月 6 日
- 筆記
- JavaSE, javaSE学习
File类
只用于表示文件或目录的信息,不能对文件内容进行访问。
java.io.File类∶代表文件和目录。在开发中,读取文件、生成文件、删除文件、修改文件的属性时经常会用到本类。
File类不能访问文件内容本身,如果需要访问文件内容本身,则需要借助输入输出流。
一.创建文件对象
package Filel;
import java.io.File;
public class Filelfd {
public static void main(String[] args) {
File file = new File("D:\\R");
System.out.println(file);
System.out.println(System.getProperty("user.dir"));
}
}
二.创建文件
package Filel;
import java.io.File;
import java.io.IOException;
public class Filelc {
public static void main(String[] args) throws IOException {
File file = new File("D:\\zyx.txt");
if(file.exists()){
file.delete();
System.out.println("文件已删除");
}
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("文件已重新创建");
}
}
三.查看文件属性
package Filel;
import java.io.File;
import java.util.Date;
public class Filefs {
public static void main(String[] args) {
String path1="D:\\SteamLibrary\\steamapps\\common\\Tricolour Lovestory\\savedata\\chs";
String path2="JavaSE";
showFileDetails(path1);
showFileDetails(path2);
}
public static void showFileDetails(String path){
File file = new File(path);
System.out.println("==========================================");
System.out.println("文件名字:"+file.getName());
System.out.println("文件长度:"+file.length()+"字节");
System.out.println((file.isDirectory()? "是目录" : "是文件" ));
System.out.println((file.canRead()? "能读" : "不能读" ));
System.out.println((file.canWrite()? "能写" : "不能写" ));
System.out.println((file.isHidden()? "隐藏" : "没隐藏" ));
System.out.println("文件路径:"+file.getPath());
System.out.println("文件带域名的完整路径:"+file.getAbsolutePath());
System.out.println("服务器端文件的最后修改时间:"+new Date(file.lastModified()));
System.out.println("==========================================");
}
}
四.文件修改、查看、删除等。
1.递归遍历输出目录文件
通过遍历目录可以在指定的目录中查找文件,或者显示所有的文件列表。File 类的 list() 方法提供了遍历目录功能,该方法有如下两种重载形式。
String[] list():该方法表示返回由 File 对象表示目录中所有文件和子目录名称组成的字符串数组,如果调用的 File 对象不是目录,则返回 null。
String[] list(FilenameFilter filter):该方法的作用与 list() 方法相同,不同的是返回数组中仅包含符合 filter 过滤器的文件和目录,如果 filter 为 null,则接受所有名称。
使用过滤器输出指定的文件,假设希望只列出目录下的某些文件,这就需要调用带过滤器参数的 list() 方法。首先需要创建文件过滤器,该过滤器必须实现 java.io.FilenameFilter 接口,并在 accept() 方法中指定允许的文件类型。
2.delete和deleteOnExit方法的区别。
delete()方法:当调用delete()方法时,直接删除文件,不管该文件是否存在,一经调用立即执行;
deleteOnExit()方法:即该方法是将删除的命令缓存了一下,到服务停止的时候再进行操作
file.deleteOnExit();
file.createNewFile();
此处的deleteOnExit()是在JVM退出的时候才执行的,因此相当于是先调用了createNewFile()再调用deleteOnExit();
package Filel;
import java.io.File;
import java.io.FilenameFilter;
public class Filexg {
public static void main(String[] args) {
File file = new File("D:\\www\\zys.txt");
System.out.println(file.setReadOnly());
File dest = new File("D:\\www\\zyl.txt");
boolean b = file.renameTo(dest);
System.out.println(b);
File l = new File("D:\\www\\zzx.txt");
l.deleteOnExit();
File dir = new File("D:\\www");
dir.mkdir();
System.out.println("修改时间:"+dir.lastModified());
System.out.println("目录路径:"+dir.getPath());
System.out.println("目录名:"+dir.getName());
dir.renameTo(new File("D:\\www22"));
dir.deleteOnExit();
File hx = new File("D:\\www22");
String[] paths = hx.list();
for (String path : paths) {
System.out.println(path);
}
System.out.println("===============================");
File[] fs = hx.listFiles();
for(File f: fs){
System.out.println(f);
}
File[] files = hx.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.startsWith("z");
}
});
for (File ol : files) {
System.out.println(ol.getName()+" : "+ol.getPath());
}
}
}
五.枚举
enum 枚举名 {
枚举体(常量列表)
}
当你需要定义一组常量时,可以使用枚举类型
package Filel;
import java.util.Random;
public class Filemeiju {
enum Week {
周一, 周二, 周三, 周四, 周五, 周六,周日
}
public static void main(String[] args) {
for (Week value : Week.values()) {
System.out.print(value+" ");
}
System.out.println();
System.out.println("############################");
Random random = new Random();
int i= random.nextInt(7);
System.out.println(i);
switch (Week.values()[i]){
case 周一:
System.out.println("周一啦");
break;
case 周二:
System.out.println("周二啦");
break;
case 周三:
System.out.println("周三啦");
break;
case 周四:
System.out.println("周四啦");
break;
case 周五:
System.out.println("周五啦");
break;
case 周六:
System.out.println("周六啦");
break;
case 周日:
System.out.println("周日啦");
break;
}
}
}