首页 > 编程语言 > 第十二章《文件与I/O流》第1节:Java的文件管理

第十二章《文件与I/O流》第1节:Java的文件管理

时间:2023-01-02 14:33:57浏览次数:54  
标签:文件 12 Java 第十二章 System File 目录 out

​Java语言中,一个类就代表了一种事物,计算机磁盘上的文件和文件夹也是一种事物,文件夹也叫目录,Java语言以File类来代表计算机的磁盘文件以及目录,类的主要功能有:

  • 获取和设置磁盘文件或文件夹的基本属性。​
  • 创建和删除文件或目录。​
  • 扫描文件夹​

本小节将讲解如何使用File类来操作文件以及目录。​


12.1.1 使用File类操作文件

File类位于java.io包下,在Java语言中,一个File类的对象就表示磁盘上的一个文件或目录,File类的构造方法很多,但最常用的构造方法只有三个,如表12-1所示。​

表12-1File类常用构造方法​

File(String path)​

File(String path, String filename)​

File(File path, String filename)​

表中第一个构造方法仅有一个字符串类型的参数path,path参数表示文件所在目录以及文件的名称。第二个构造方法有两个字符串参数,第一个参数path表示文件所在目录,第二个参数filename表示文件的名称。第三个构造方法也有两个参数,其中第一个参数以path属于File型,它也表示文件所在目录,而第二个参数也表示文件的名称。需要注意:以字符串表示的文件名称必须包含文件的后缀名。文件所在目录可以用相对路径和绝对路径两种方式来表示。如果以相对路径来表示目录,那么目录表示位于IDEA的工程文件夹下的文件夹。例如:​

File file = new File("abc","game.txt");​

以上代码中,参数“abc”表示文件所在目录,这个目录就是使用相对路径的形式表示。如果开发者使用IDEA编程工具,那么这个目录表示工程文件夹中的abc文件夹。磁盘上的目录往往分为多层,在Java语言中,每一层目录以“/”或“\\”作为路径分隔符。此外,在表示相对路径时,使用“.”表示当前目录, “..”表示上一级目录,“/”或“\\”表示磁盘根目录。​

File类提供了很多用于操作文件和获取文件属性的方法,如表12-2所示。​

表12-2 File类常用方法​

方法​

作用​

String getName()​

返回此File对象所表示的文件名或路径名(如果是路径,则返回最后一级子路径名)​

String getPath()​

返回此File对象所对应的路径名​

File getAbsoluteFile()​

返回此File对象的绝对路径​

String getAbsolutePath()​

返回此File对象所对应的绝对路径名​

String getParent()​

返回此File对象所对应目录(最后一级子目录)的父目录名​

boolean renameTo(File newName)​

重命名此File对象所对应的文件或目录,如果重命名成功,则返回true,否则返回false​

boolean exists()​

判断File对象所对应的文件或目录是否存在​

boolean canWrite()​

判断File对象所对应的文件和目录是否可写​

boolean canRead()​

判断File对象所对应的文件和目录是否可读​

boolean isFile()​

判断File对象所对应的是否是文件,而不是目录​

boolean isDirectory()​

判断File对象所对应的是否是目录,而不是文件​

boolean isAbsolute()​

判断File对象所对应的文件或目录是否是绝对路径​

long lastModified()​

返回文件的最后修改时间​

long length()​

返回文件内容的大小(单位:字节)​

boolean createNewFile()​

当此 File对象所对应的文件不存在时,新建一个该File对象所指定的新文件,如果创建成功则返回 true;否则返回false。​

boolean delete()​

删除 File对象所对应的文件或目录,删除成功返回true,否则返回false​

void deleteOnExit()​

如果File类对象所对应的文件或路径存在时进行删除​

下面的【例12_01】展示了如何使用File类的方法访问一个文件。由于程序要对文件进行操作,读者需要在C盘根目录下新建一个名为temp的文件夹,之后在文件夹中新建一个12_01.txt文本文件,在这个文件中写入“你好abc”并保存。​

【例12_01 使用File类访问文件】

Exam12_01.java​

import java.io.File;
public class Exam12_01 {
public static void main(String[] args) {
File file = new File("C:/temp/12_01.txt");
System.out.println("文件是否存在:"+file.exists());
System.out.println("文件路径:"+file.getPath());
System.out.println("绝对路径:"+file.getAbsolutePath());
System.out.println("文件所在目录:"+file.getParent());
System.out.println("是否可读:"+file.canRead());
System.out.println("是否可写:"+file.canWrite());
System.out.println("是否是隐藏文件:"+file.isHidden());
System.out.println("是否是普通文件:"+file.isFile());
System.out.println("是否是文件目录:"+file.isDirectory());
System.out.println("文件的最后修改时间:"+file.lastModified());
System.out.println("文件大小:"+file.length()+"字节");
}
}

【例12_01】的运行结果如图12-1所示。​

 第十二章《文件与I/O流》第1节:Java的文件管理_Java

图12-1【例12_01】运行结果​

从图12-1可以看出:文件的最后修改是时间是一个long型的数据,这个数字实际上就是距离时间原点的毫秒数,读者可以用这个数字作为参数创建一个Date类对象,这样就能获得文件最后被修改的年月日和时分秒。此外还可以看出:文件的大小为7字节,这是因为在txt文件默认编码格式下,每个汉字占据2个字节,而每个英文字母占据1个字节,因此文件中的“你好abc”总共占7字节。如果File类对象表示的是一个根本不存在的文件,那么程序运行时所有返回值类型为boolean的方法将全部返回false,而最后修改时间以及文件的大小都是0,读者可以自行尝试使用File类对象表示一个不存在的文件并获取其各项属性。​

12.1.2使用File类操作目录

File类不仅仅定义了操作文件的方法,还定义了用于操作目录的方法,如表12-3所示。​

表12-3File类操作目录的方法​

方法​

作用​

String[] list()​

列出目录中的所有文件或子目录的名称​

String[] list(FilenameFilter filter)​

列出目录中特定名称或后缀名的文件和子目录​

File[] listFiles()​

列出目录中所有文件和子目录​

File[] listFiles(FilenameFilter filter)​

列出目录中特定名称或后缀名的文件​

boolean mkdir() ​

建立单级目录​

boolean mkdirs()​

建立多级目录​

static File[] listRoots​

列出系统所有根目录(即磁盘分区)​

从表12-3可以看出:list()方法和listFiles()方法都可以没有参数,也都可以添加一个FilenameFilter类型的参数。FilenameFilter是一个接口,该接口定义了一个抽象方法accept(),这个方法用来定义哪些名称的文件会被列出,因此程序员在实现accept()抽象方法时要设定文件的筛选条件。下面的【例12_02】展示了如何用File类对象操作目录,为展示出搜索文件的效果,各位读者需要在C盘的temp的文件夹中再新建一些文件,如图12-2所示。​

 第十二章《文件与I/O流》第1节:Java的文件管理_File_02

图12-2 temp文件夹​

【例12_02使用File类访问目录】

Exam12_02.java​

import java.io.*;
class Filter implements FilenameFilter{
@Override
public boolean accept(File dir, String name) {
// 搜索所有txt文本文件
return name.endsWith(".txt");
}
}
public class Exam12_02 {
public static void main(String[] args) {
Filter filter = new Filter();
File dir = new File("C:/temp");//dir是要访问的目录
//列出该目录下所有文件的名称
String[] names1 = dir.list();
System.out.println("temp文件夹下所有文件及子文件夹的名称:");
for(String name:names1){
System.out.print(name+" ");
}
System.out.println();
//列出该目录下txt文本文件名称
String[] names2 = dir.list(filter);
System.out.println("temp文件夹下所有txt文件的名称:");
for(String name:names2){
System.out.print(name+" ");
}
System.out.println();
//列出该目录下所有文件
File[] files1 = dir.listFiles();
System.out.println("temp文件夹下所有文件及子文件夹详情:");
System.out.printf("%-25s%-15s%-10s\n","名称","大小","是否为目录");
for(File file:files1){
String name= file.getName();
long length = file.length();
boolean isDir = file.isDirectory();
System.out.printf("%-20s%-15d%-10b\n",name,length,isDir);
}
}
}

【例12_02】的Exam12_02.java文件中包含两个类,其中Filter类是FilenameFilter接口的实现类,它在实现accept()抽象方法时指定要列出的文件必须以“.txt”作为名称结尾。【例12_02】的运行结果如图12-3所示。​

 第十二章《文件与I/O流》第1节:Java的文件管理_文件管理_03

图12-3【例12_02】运行结果​

从图12-3可以看出:在列出以“.txt”作为名称结尾的文件时,把文件夹“文件夹1.txt”也列了出来,如果想只是列出文件不包括文件夹,还需要用isFile()方法进行第二次筛选。

本文字版教程还配有更详细的视频讲解,小伙伴们可以点击这里观看。

标签:文件,12,Java,第十二章,System,File,目录,out
From: https://blog.51cto.com/mugexuetang/5983689

相关文章

  • 第十二章《文件与I/O流》第2节:流的概念与分类
    ​12.1小节所介绍的File类只能获取文件的各种属性,并不能读取到文件的内容,更不能向文件中写入数据,如果希望读取或修改文件,就必须用“流”来完成。实际上,流不仅仅能够读写文件......
  • JavaScript-扩展阅读
    JavaScript-扩展阅读学习目标能够知道解释性语言和编译型语言的特点能够知道标识符不能是关键字或保留字1.解释型语言和编译型语言1.概述2.执行过程2.标识......
  • 电脑版微信dat文件用什么软件打开
    一般来说,凡是说到微信电脑版的DAT文件,指的都是聊天过程中收发的图片,加密保存在电脑里。​这些文件正常情况下也只能在微信登录后,在微信里查看,因为微信加密的当然只有微信才......
  • 第十一章《Java实战常用类》第9节:Comparable接口和Comparator接口
    ​对事物进行比较往往是希望对它们进行排序,因此排序的结果是由比较的结果产生的。而对事物进行比较就需要明确比较的内容是什么。例如某学校择优录取考生,就要比较所有考生的......
  • 第十一章《Java实战常用类》第10节:Locale类
    ​世界上有很多种语言,说不同语言的人不仅仅使用的文字不同,就连表达习惯和思维方式可能也不相同。此外,即使是同一种语言在不同的国家或地区也有差别,例如中国大陆地区都使用简......
  • 第十一章《Java实战常用类》第11节:NumberFormat类和DecimalFormat类
    ​NumberFormat类用于格式化数字,它位于java.text包下,是一个抽象类,因此不能通过构造方法创建对象,通常NumberFormat类是通过getInstance()或getXXXInstance()静态方法来获得它......
  • Java 中基本类型和字符串之间的转换-2023-1-2
    在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换。其中,基本类型转换为字符串有三种方法:1.使用包装类的toString()方法2.使用String类的valueOf()......
  • javascript-数据类型-数据类型,获取数据变量的类型,数据类型的转换
    javascript-数据类型-数据类型,获取数据变量的类型,数据类型的转换目录javascript-数据类型-数据类型,获取数据变量的类型,数据类型的转换学习目标:1.数据类型简介1.1为什么......
  • 浅谈Java并发
    Java并发是比较难的知识点,难于对并发的理解。并发要从操作系统和硬件层面去理解,才会比较深入,而不单单是从编程语言的逻辑去理解。首先对于并发要清楚的几点:线程可能在任......
  • Java编程技术期末复习总结
    Java编程技术期末复习总结一、Java编程基础下列软件包中,不需要使用import指令就可直接使用的是____。A.java.langB.java.textC.java.sqlD.java.utilA在java......