首页 > 编程语言 >Java的File类解析

Java的File类解析

时间:2023-07-26 10:32:18浏览次数:34  
标签:文件 Java File System file 解析 out String

File类

File类

注:Windows 的路径分隔符使用反斜线“\”,而 Java 程序中的反斜线表示转义字符,所以如果需要在 Windows 的路径下包括反斜线,则应该使用两条反斜线或直接使用斜线“/”也可以。Java 程序支持将斜线当成平台无关的路径分隔符。 1.描述

java.io.File类∶代表文件和目录。在开发中,读取文件、生成文件、删除文件、修改文件的属性时经常会用到本类。File类java.io包中唯一代表磁盘文件本身的对象。
File类不能访问文件内容本身,如果需要访问文件内容本身,则需要借助输入输出流。
  1. 创建

    File提供了三种形式的构造方法 方法 参数描述 File(String path) 如果 path 是实际存在的路径,则该 File 对象表示的是目录;如果 path 是文件名,则该 File 对象表示的是文件。 File(String path, String name) path 是路径名,name 是文件名 File(File dir, String name) dir 是路径对象,name 是文件名

    使用任意一个构造方法都可以创建一个File对象,下面是一个小例子


注:Windows 的路径分隔符使用反斜线“\”,而 Java 程序中的反斜线表示转义字符,所以如果需要在 Windows 的路径下包括反斜线,则应该使用两条反斜线或直接使用斜线“/”也可以。Java 程序支持将斜线当成平台无关的路径分隔符。
1.描述

    java.io.File类∶代表文件和目录。在开发中,读取文件、生成文件、删除文件、修改文件的属性时经常会用到本类。File类java.io包中唯一代表磁盘文件本身的对象。
    File类不能访问文件内容本身,如果需要访问文件内容本身,则需要借助输入输出流。

2. 创建

    File提供了三种形式的构造方法
    方法 	参数描述
    File(String path) 	如果 path 是实际存在的路径,则该 File 对象表示的是目录;如果 path 是文件名,则该 File 对象表示的是文件。
    File(String path, String name) 	path 是路径名,name 是文件名
    File(File dir, String name) 	dir 是路径对象,name 是文件名

    使用任意一个构造方法都可以创建一个File对象,下面是一个小例子

File类的常用方法和常量

以下是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 HelloWorld
public static final char pathSeparatorChar = fs.getPathSeparator(); //得到分割符
public static final String pathSeparator = "" + pathSeparatorChar;  //将分隔符转化为字符串,下同

//用来分隔同一个路径字符串中的目录的,Windows 下指/。例如 C:/Program Files/Common Files
public 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 static  void 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 { @Override public 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));
    }
}

}

标签:文件,Java,File,System,file,解析,out,String
From: https://blog.51cto.com/teayear/6854437

相关文章

  • Java解决高并发秒杀商品
    在看本文章之前,需要了解Springboot搭建和使用,本篇文章核心问题是如何解决高并发问题。开发环境:redis缓存4.0.1,Rabbitmq消息队列,Erlang(这个跟MQ环境有关,先安装Erlang,再安装MQ),mysql5.7,JDK1.8(Springboot要用1.8以上的版本)开发框架:Springboot2.0.4,mybatis,前端页面:thym......
  • Java面试题 P5:简述final作用
    1、简述final作用?final含义是最终的。(1)修饰类:表示类不可被继承,不可以有子类;(2)修饰方法:表示方法不可以被子类覆盖,但是可以重载;(3)修饰变量:表示变量一旦被赋值就不可以更改它的值。(4)修饰成员变量如果final修饰的是类变量,只能在静态初始化块中指定初始值或者声明该类变量时指定初......
  • 《安富莱嵌入式周报》第318期:无线电扫描仪,高精度功耗分析仪,单片机JavaScript引擎,平头
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 【实战技能视频】基于硬件垂直消隐的多缓冲技术在LVGL,emWin,GUIX和TouchGFX应用https://www.armbbs.cn/forum.php?mod=viewthread&tid=120114视频版:https://www.bilibili.......
  • Java程序员进阶之路----四阶段
    第一阶段:JavaSE全面深入的学系JavaSE课程,主要内容包括Java概述与环境搭建、基本语法、面向对象基础、接口、抽象类、常用类(Object/内部类/包装类/String等)、集合、算法和数据结构、异常、多线程、I/O框架、网络编程、JDK8新特性、JVM内存模型、反射、注解xml等。本阶段学......
  • 学习Java第5天
    Java程序运行机制1.编译型(complie)操作要求不高(c....c++)2.解释性速度要求不高,(网页-脚本)3.程序运行机制psvm生成门方法sout生成输出语句IDEA的使用 ......
  • 面试类-Java并发编程 (一)
    1.并行跟并发有什么区别?从操作系统的角度来看,线程是CPU分配的最小单位。并行就是同一时刻,两个线程都在执行。这就要求有两个CPU去分别执行两个线程。并发就是同一时刻,只有一个执行,但是一个时间段内,两个线程都执行了。并发的实现依赖于CPU切换线程,因为切换的时间特别短,所以基本......
  • [爬虫]2.2.2 使用PhantomJS处理JavaScript
    PhantomJS是一个无头(headless)浏览器,它可以解析和执行JavaScript,非常适合用于爬取动态网页。"无头"意味着它可以在没有用户界面的情况下运行,这对于服务器环境和自动化任务非常有用。安装PhantomJS首先,你需要下载并安装PhantomJS。你可以从官方网站下载↗适合你的操作系统的版本......
  • java中关于多态的理解
    多态:是同一个行为具有多个不同表现形式或形态的能力。在代码的运用中主要是关于子类中方法的重写,实现了同一个父类接口可以进行不同子类中重写的方法publicclassGeometricOject{//父类publicdoublefindArea(){return0.0;}}publicclassCircleext......
  • Java面试常见问题总结
    Java面试常见问题总结Java基础Java中的几种基本数据类型是什么?对应的包装类型是什么?各自占用多少字节呢?String、StringBuffer和StringBuilder的区别是什么?String为什么是不可变的?Strings1=newString("abc");这段代码创建了几个字符串对象?==与equals?hashCo......
  • 03_JavaScript
    一.JavaScript概述1.简介JavaScript一种解释性脚本语言,是一种动态类型、弱类型、基于原型继承的语言,内置支持类型。它的解释器被称为JavaScript引擎,作为浏览器的一部分,广泛用于客户端的脚本语言,用来给HTML网页增加动态功能。脚本语言是为了缩短传统的编写-编译-链接-运行(edit-......