Java常用类File六. File类注:Windows 的路径分隔符使用反斜线“\”,而 Java 程序中的反斜线表示转义字符,所以如果需要在 Windows 的路径下包括反斜线,则应该使用两条反斜线或直接使用斜线“/”也可以 。Java 程序支持将斜线当成平台无关的路径分隔符 。
1.描述
java.io.File类∶代表文件和目录 。在开发中,读取文件、生成文件、删除文件、修改文件的属性时经常会用到本类 。File类java.io包中唯一代表磁盘文件本身的对象 。- File类不能访问文件内容本身,如果需要访问文件内容本身,则需要借助输入输出流 。
- File提供了三种形式的构造方法
方法参数描述File(String path)如果 path 是实际存在的路径,则该 File 对象表示的是目录;如果 path 是文件名,则该 File 对象表示的是文件 。File(String path, String name)path 是路径名,name 是文件名File(File dir, String name)dir 是路径对象,name 是文件名 - 使用任意一个构造方法都可以创建一个File对象,下面是一个小例子
package konoha.commonClass.ClassFile;import java.io.File;import java.io.IOException;public class testClassFile {public static void main(String[] args) throws IOException {File file = new File("D:\\JavaLearning\\JavaSE\\JavaSE\\src\\konoha\\commonClass\\ClassFile\\testFile");//输出路径System.out.println(file);/*** user.dir* 用户目录**/System.out.println(System.getProperty("user.dir"));}
- 以下是File常用方法的描述
方法名方法描述boolean exists()测试当前 File 是否存在boolean canRead()测试应用程序是否能从指定的文件中进行读取boolean canWrite测试应用程序是否能写当前文件boolean delete()删除当前对象指定的文件String getAbsolutePath()返回由该对象表示的文件的绝对路径名String getName()返回表示当前对象的文件名或路径名(如果是路径,则返回最后一级子路径名)String getParent()返回当前 File 对象所对应目录(最后一级子目录)的父目录名boolean isAbsolute()测试当前 File 对象表示的文件是否为一个绝对路径名 。该方法消除了不同平台的差异,可以直接判断 file 对象是否为绝对路径 。boolean isDirectory()测试当前 File 对象表示的文件是否为一个路径boolean isFile()测试当前 File 对象表示的文件是否为一个“普通”文件long lastModified()返回当前 File 对象表示的文件最后修改的时间,(是与计算机0时间相减的结果,是一个long值,可以创建Data对象)long length()返回当前 File 对象表示的文件长度String[] list()返回当前 File 对象指定的路径文件列表String[] list(FilenameFilter)返回当前 File 对象指定的目录中满足指定过滤器的文件列表boolean mkdir()创建一个目录,它的路径名由当前 File 对象指定boolean mkdirs()创建一个目录,它的路径名由当前 File 对象指定boolean renameTo(File)将当前 File 对象指定的文件更名为给定参数 File 指定的路径名mkdir()与mkdirs()方法的区别在于mkdir在创建目录路径有一个不存在时,就会创建失败,而mkdirs则会递归的创建所有不存在的目录 。 - File类有两个常用常量:pathSeparator和separator,源码的定义如下
private static final FileSystem fs = DefaultFileSystem.getFileSystem(); //得到文件系统//指的是分隔连续多个路径字符串的分隔符,Windows 下指; 。例如 java -cp test.jar;abc.jar HelloWorldpublic static final char pathSeparatorChar = fs.getPathSeparator(); //得到分割符public static final String pathSeparator = "" + pathSeparatorChar;//将分隔符转化为字符串,下同//用来分隔同一个路径字符串中的目录的,Windows 下指/ 。例如 C:/Program Files/Common Filespublic static final char separatorChar = fs.getSeparator();public static final String separator = "" + separatorChar;
- 获取文件属性
假设有一个文件位于"C:\Users\45362\Downloads\KindlePreviewerInstaller.exe"。编写 Java 程序获取并显示该文件的长度、是否可写、最后修改日期以及文件路径等属性信息 。实现代码如下
package konoha.commonClass.ClassFile;import java.io.File;import java.util.Date;/** * 假设有一个文件位于 `"C:\Users\45362\Downloads\KindlePreviewerInstaller.exe"` 。* 编写 Java 程序获取并显示该文件的长度、是否可写、最后修改日期以及文件路径等属性信息 。*/public class getFileDetails {public static void main(String[] args) { //两个文件一个使用了绝对路径创建,一个使用了相对路径创建,输出是可以看出其区别String path1 = "C:\\Users\\45362\\Downloads\\KindlePreviewerInstaller.exe";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 Details: ");System.out.println("File Name: " + file.getName());System.out.println("File Length: " + file.length()+"Byte");System.out.println("File or Dir: " + (file.isDirectory() ? "Dir" : "File"));System.out.println("Is File able to read: " + (file.canRead() ? "Yes" : "No"));System.out.println("Is File able to write: " + (file.canWrite() ? "Yes" : "No"));System.out.println("Is File Hidden: " + (file.isHidden() ? "Yes" : "No"));System.out.println("Last Modified Time: " + new Date(file.lastModified()));//使用Data类来规范输出时间System.out.println("File Path: " + file.getPath());System.out.println("Absolute Path: " + file.getAbsolutePath());System.out.println("============================================================");}} - 创建和删除文件
File 类不仅可以获取已知文件的属性信息,还可以在指定路径创建文件,以及删除一个文件 。创建文件需要调用 createNewFile() 方法,删除文件需要调用 delete() 方法 。无论是创建还是删除文件通常都先调用 exists() 方法判断文件是否存在 。
假设要在 C 盘上创建一个 test.txt 文件,程序启动时会检测该文件是否存在,如果不存在则创建;如果存在则删除它再创建 。
在操作文件时一定要使用 File.separator 表示分隔符 。在程序的开发中,往往会使用 Windows 开发环境,因为在 Windows 操作系统中支持的开发工具较多,使用方便,而在程序发布时往往是直接在 Linux 或其它操作系统上部署,所以这时如果不使用 File.separator,则程序运行就有可能存在问题 。关于这一点我们在以后的开发中一定要有所警惕 。
package konoha.commonClass.ClassFile;import java.io.File;import java.io.IOException;/** * 假设要创建一个 test.txt 文件,程序启动时会检测该文件是否存在,如果不存在则创建;如果存在则删除它再创建 。*/public class createAndDeleteFile {public static void main(String[] args) throws IOException {//File file = new File("D:\\test.txt");File file = new File("D:" + File.separator+"test.txt");//在windows系统中两种方法都可以成功创建文件,区别如上文if (file.exists()) {file.delete();System.out.println("File Deleted!");}file.createNewFile();System.out.println("File Created!");}} - 递归遍历输出目录文件
通过遍历目录可以在指定的目录中查找文件,或者显示所有的文件列表 。File 类的 list() 方法提供了遍历目录功能,该方法有如下两种重载形式 。
String[] list():该方法表示返回由 File 对象表示目录中所有文件和子目录名称组成的字符串数组,如果调用的 File 对象不是目录,则返回 null 。
提示:list() 方法返回的数组中仅包含文件名称,而不包含路径 。但不保证所得数组中的相同字符串将以特定顺序出现,特别是不保证它们按字母顺序出现 。
String[] list(FilenameFilter filter):该方法的作用与 list() 方法相同,不同的是返回数组中仅包含符合 filter 过滤器的文件和目录,如果 filter 为 null,则接受所有名称 。
package konoha.commonClass.ClassFile;import java.io.File;import java.util.Date;/** * 遍历输出文件夹下所有的目录和文件及其基本属性 * 本例子中采用了listFiles()的方法,而不是list()方法,两者用法相似,只需要注意返回值的差异即可 */public class showAllFileInDIr {public static void main(String[] args) {File file = new File("D:\\JavaLearning\\JavaSE\\JavaSE\\src");showFiles(file);}public staticvoid showFiles(File file){System.out.println("All files in " + file.getName() + ":");int level = 0;showFiles(file,level);}public static void showFiles(File file, int level) {System.out.print("|-");for (int i = 0; i < level; i++) System.out.printf("-");if (file.isDirectory()){System.out.println(getFileDetails(file));File [] files = file.listFiles();for (File tmp: files) {showFiles(tmp, level+1);}}else System.out.println(getFileDetails(file));}public static String getFileDetails(File file) {String des = "";des =des+file.getName() +"\t" + (file.isDirectory()?"Dir":"File") + "\t";if (file.isDirectory())des += "---\t";else des += file.length() + "Bytes\t";des += new Date(file.lastModified());return des;}} - 使用过滤器输出指定的文件
假设希望只列出目录下的某些文件,这就需要调用带过滤器参数的 list() 方法 。首先需要创建文件过滤器,该过滤器必须实现java.io.FilenameFilter接口,并在 accept() 方法中指定允许的文件类型 。
实现方法如下:
package konoha.commonClass.ClassFile;import java.io.File;import java.io.FilenameFilter;//过滤器public class javaFilter implements FilenameFilter {@Overridepublic boolean accept(File dir, String name) {//允许指定的文件类型return name.endsWith(".java");}}package konoha.commonClass.ClassFile;import java.io.File;public class showFileInDir {public static void main(String[] args) { //下面两种方法都可以实现要求,其中getFileDetails()方法来自上一个练习,此处使用String path = "D:\\JavaLearning\\JavaSE\\JavaSE\\src\\konoha\\commonClass\\ClassFile";File file = new File(path);String [] names = file.list(new javaFilter());for (String str : names) {System.out.println(showAllFileInDIr.getFileDetails(new File(path, str)));}File [] names = file.listFiles(new javaFilter());for (File str : names) {System.out.println(showAllFileInDIr.getFileDetails(str));}}}
- JDK1.5引入了枚举类型 。枚举类型的定义包括枚举声明和枚举体 。格式如下︰
enum 枚举名 {枚举体(常量列表)}//如下,定义了一个枚举enum Season {SPRING,SUMMER,AUTUMN,WINTER} - 所有的枚举类型隐性地继承自
java.lang.Enum。枚举实质上还是类! 而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是public static final修饰的 。可以直接通过枚举类型名使用它们 。
- 当你需要定义一组常量时,可以使用枚举类型 。
- 尽量不要使用枚举的高级特性,事实上高级特性都可以使用普通类来实现,没有必要引入枚举,增加程序的复杂性!
- 看下面这个小程序的演示
【java常用类有哪些 Java常用类-File类】package konoha.commonClass.Enum;import java.util.Random;public class testEnum {//定义了一个枚举enum Season {SPRING,SUMMER,AUTUMN,WINTER}enum Week {MON,TUE,WEN,TUS,FIR,SAT,SUN}public static void main(String[] args) {//遍历枚举for (Week week : Week.values()) {System.out.println(week);}//枚举和switch-case结合使用int i = new Random().nextInt(4);switch (Season.values()[i]){case SPRING:System.out.println("Spring is coming!");break;case SUMMER:System.out.println("Summer is coming!");break;case AUTUMN:System.out.println("Autumn is coming!");break;case WINTER:System.out.println("Winter is coming!");break;}}}
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
