File类
只用于表示文件或目录的信息,不能对文件内容进行访问。
java.io.File类∶代表文件和目录。在开发中,读取文件、生成文件、删除文件、修改文件的属性时经常会用到本类。
File类不能访问文件内容本身,如果需要访问文件内容本身,则需要借助输入输出流。
一.创建文件对象
package Filel; import java.io.File; public class Filelfd { public static void main(String[] args) { //创建一个File对象 File file = new File("D:\\R"); System.out.println(file); //D:\R //user.dir 用户目录 System.out.println(System.getProperty("user.dir")); //D:\JavaSE\OPP } }
二.创建文件
package Filel; import java.io.File; import java.io.IOException; //假设要创建一个 zyx.txt 文件,程序启动时会检测该文件是否存在,如果不存在则创建;如果存在则删除它再创建。 public class Filelc { public static void main(String[] args) throws IOException { File file = new File("D:\\zyx.txt"); //创建file对象 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"); //设置文件只读(只能打开来观看,不能修改也不能储存) //该方法返回布尔数据类型。如果File对象可以设置为Read Only,则该函数返回true,否则返回false。 System.out.println(file.setReadOnly()); //文件重命名 //该方法返回布尔数据类型。如果File对象修改成功,则该函数返回true,否则返回false。 File dest = new File("D:\\www\\zyl.txt"); boolean b = file.renameTo(dest); //修改file对象名字 System.out.println(b); //文件删除 File l = new File("D:\\www\\zzx.txt"); l.deleteOnExit(); File dir = new File("D:\\www"); //目录的创建 // dir.mkdirs();//可以创建多级目录 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) { //Week.values()相当于数组名字 = args //Week.values()[i]=args[i] //Week.values().for 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; } } }