【Java】IO (1)-- File类

【Java】IO(1)-- File类


在 Java 中,File 类是 java.io 包中唯一映射磁盘文件本身的对象。File类可以获取文件的相关信息(查看文件名、路径、访问权限、修改日期等),但是File 类不能从文件中读取信息和向文件写入信息

1. File类的三种构造方法

 1 //File(File parent,String child):根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
 2 File parent = new File("E:\\test");
 3 File child = new File(parent, "demo.txt");
 4 
 5 //File(String pathname):通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。如果给定字符串是空字符串,则结果是空的抽象路径名。
 6 File file = new File("E:\\test\\demo.txt");
 7 
 8 //File(String parent,String child):根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
 9 String parent = "E:\\test\\";
10 String child = "demo.txt";
11 File file = new File(parent,child);

注意:Windows操作系统的路径,如 E:\demo\hello.java,在Java程序中,其路径写为 E:/demo/hello.java 或者 E:\\demo\\hello.java

2. File类的主要功能

(1)获取文件属性

 1 import java.io.File;
 2 import java.util.Date;
 3 
 4 public class File_test {
 5     public static void main(String[] args){
 6         File f=new File("E:\\test\\hello.doc");    //抽象路径名为"E:\\test\\hello.doc"
 7         System.out.println("获取文件 E:\\test\\hello.doc 的信息:");
 8         System.out.println("-------------------------------");
 9         System.out.println("文件长度:"+f.length()+"字节");
10         System.out.println("判断该File对象是不是文件:"+(f.isFile()?"是文件":"不是文件"));
11         System.out.println("判断该File对象是不是目录:"+(f.isDirectory()?"是目录":"不是目录"));
12         System.out.println("是否可读:"+(f.canRead()?"可读取":"不可读取"));
13         System.out.println("是否可写:"+(f.canWrite()?"可写入":"不可写入"));
14         System.out.println("是否隐藏:"+(f.isHidden()?"是隐藏文件":"不是隐藏文件"));
15         System.out.println("最后修改日期:"+new Date(f.lastModified()));
16         System.out.println("文件名称:"+f.getName());
17         System.out.println("文件父路径:"+f.getParent());
18         System.out.println("抽象路径名转化为路径名字符串:"+f.getPath());    //等价于 f.toString()
19         System.out.println("判断抽象路径名是否为绝对路径:"+(f.isAbsolute()?"是绝对路径":"不是绝对路径"));
20         System.out.println("文件绝对路径:"+f.getAbsolutePath());
21         System.out.println("-------------------------------");
22     }
23 }

运行结果

获取文件 E:\test\hello.doc 的信息:
-------------------------------
文件长度:9216字节
判断该File对象是不是文件:是文件
判断该File对象是不是目录:不是目录
是否可读:可读取
是否可写:可写入
是否隐藏:不是隐藏文件
最后修改日期:Mon Jul 01 21:20:47 CST 2019
文件名称:hello.doc
文件父路径:E:\test
抽象路径名转化为路径名字符串:E:\test\hello.doc
判断抽象路径名是否为绝对路径:是绝对路径
文件绝对路径:E:\test\hello.doc
-------------------------------

public boolean setReadOnly():设置该文件只能读,不能写。

1 public static void main(String[] args) {
2         File f = new File("E:\\test\\hello.doc"); // 抽象路径名为"E:\\test\\hello.doc"
3         f.setReadOnly();
4         System.out.println("是否可读:" + (f.canRead() ? "可读取" : "不可读取"));
5         System.out.println("是否可写:" + (f.canWrite() ? "可写入" : "不可写入"));
6     }

运行结果

是否可读:可读取
是否可写:不可写入

(2)创建和删除文件、创建和删除目录、遍历目录list()和list()

String[] list()该方法表示返回由 File 对象表示目录中所有文件和子目录名称组成的字符串数组,如果调用的 File 对象不是目录,则返回 null。

提示:list() 方法返回的数组中仅包含文件名称,而不包含路径。但不保证所得数组中的相同字符串将以特定顺序出现,特别是不保证它们按字母顺序出现。

 1 package test0607;
 2 
 3 import java.io.File;
 4 import java.io.IOException;
 5 import java.util.Date;
 6 
 7 public class File_test {
 8     public static void main(String[] args) throws IOException {
 9         File nf = new File("E:/test/new_file.doc"); // 创建指向文件 E:/test/new_file.doc 的File对象
10         if (nf.exists()) // 判断该文件是否存在
11         {
12             nf.delete(); // 存在则先删除
13         }
14         nf.createNewFile(); // 再创建该文件
15 
16         File dir = new File("E:/test01"); // 创建指向目录 E:/test01 的File对象
17         if (dir.exists()) // 判断该目录是否存在
18         {
19             dir.delete(); // 存在则先删除
20         }
21         dir.mkdir(); // 再创建该目录
22 
23         File lf = new File("E:/test/"); // 创建需要遍历的File对象
24         System.out.println("文件类型\t文件大小\t文件名称");
25         System.out.println("------------------------------");
26         String fileList[] = lf.list(); // 调用不带参数的list()方法
27         for (int i = 0; i < fileList.length; i++) { // 遍历返回的字符数组
28             System.out.print((new File("E:/test/", fileList[i])).isFile() ? "文件" + "\t" : "文件夹" + "\t");
29             System.out.print((new File("E:/test/", fileList[i])).length() + "字节" + "\t");
30             System.out.println(fileList[i]);            
31             // 由于 list()方法返回的字符数组中仅包含文件名称,因此为了获取文件类型和大小,必须先转换为 File对象再调用其方法。
32         }
33         System.out.println("------------------------------");
34     }
35 }

运行结果

文件类型    文件大小    文件名称
----------------------------------
文件夹    0字节        dir01
文件夹    0字节        dir02
文件      0字节        good.bmp
文件      9216字节     hello.doc
文件      0字节        hi.txt
文件      0字节        new_file.doc
----------------------------------

 

String[] list(FilenameFilter filter): 该方法的作用与 list() 方法相同,不同的是返回数组中仅包含符合 filter过滤器 的文件和目录,如果 filter 为 null,则接受所有名称。

首先需要创建文件过滤器,该过滤器必须实现 java.io.FilenameFilter 接口,并在 accept() 方法中指定允许的文件类型。

 1 import java.io.File;
 2 import java.io.FilenameFilter;
 3 import java.io.IOException;
 4 import java.util.Date;
 5 
 6 class DocFilter implements FilenameFilter
 7 {
 8     //实现 FilenameFilter 接口
 9     @Override
10     public boolean accept(File dir,String name)
11     {
12         //指定允许的文件类型
13         return name.endsWith(".txt")||name.endsWith(".bmp");
14     }
15 }
16 
17 public class File_test03 {
18     public static void main(String[] args) throws IOException {
19         File lf = new File("E:/test/"); // 创建需要遍历的File对象
20         System.out.println("文件类型\t文件大小\t文件名称");
21         System.out.println("------------------------------");
22         String fileList[] = lf.list(new DocFilter()); // 调用不带参数的list()方法
23         for (int i = 0; i < fileList.length; i++) { // 遍历返回的字符数组
24             System.out.print((new File("E:/test/", fileList[i])).isFile() ? "文件" + "\t" : "文件夹" + "\t");
25             System.out.print((new File("E:/test/", fileList[i])).length() + "字节" + "\t");
26             System.out.println(fileList[i]);            
27             // 由于 list()方法返回的字符数组中仅包含文件名称,因此为了获取文件类型和大小,必须先转换为 File对象再调用其方法。
28         }
29         System.out.println("------------------------------");
30     }
31 }

运行结果

文件类型    文件大小    文件名称
------------------------------
文件       0字节      good.bmp
文件       0字节      hi.txt
------------------------------

猜你喜欢

转载自www.cnblogs.com/yadiel-cc/p/11117276.html