【第七章】I/O输入输出:File类

1.什么是流?

在Java编程中,I/O(输入输出)是至关重要的一个方面,涉及到文件操作、数据流处理等。File类是Java中用于表示文件和目录路径的类,提供了一系列方法来操作文件系统。本章将重点介绍File类的基本用法和常见操作。

在Java编程中,流(Stream)是一种用于在程序中输入和输出数据的抽象概念。流可以看作是数据在程序中的传输通道,用于在程序中读取输入数据和将数据写出到输出目的地。流可以与各种数据源和目的地进行交互,如文件、网络连接、内存等。

流在Java中分为输入流(Input Stream)和输出流(Output Stream)两种类型,分别用于从数据源读取数据和向数据目的地写入数据。流可以是字节流(Byte Stream)或字符流(Character Stream)。

  • 字节流(Byte Stream):以字节为单位进行数据传输,适用于处理二进制文件或非文本数据。
  • 字符流(Character Stream):以字符为单位进行数据传输,适用于处理文本文件或包含文本的数据。

流的基本特点包括:

  1. 顺序性:数据按照流的顺序依次传输,保持数据的顺序性。
  2. 单向性:输入流用于读取数据,输出流用于写入数据,不能同时读写。
  3. 实时性:数据通过流即时传输,不需要整个数据都加载到内存中。
  4. 自动关闭:在使用完流之后,通常需要手动关闭流来释放资源。

在Java中,流是通过Java I/O库提供的类和接口来实现的。常见的流包括InputStream、OutputStream、Reader、Writer等。通过使用流,可以实现文件读写、网络通信、数据处理等功能。

2.本章知识点关系图

3.File类简介

3.1 File类的作用和特点。

File类是Java中用于表示文件和目录路径的类,它提供了一种抽象的方式来操作文件系统中的文件和目录。File类的主要作用和特点包括:

表示文件和目录:File类可以用来表示文件和目录的路径,可以操作文件系统中的文件和目录。

创建、删除文件和目录:File类提供了方法来创建新文件或目录,以及删除现有的文件或目录。

获取文件属性:通过File类可以获取文件的各种属性,如文件名、路径、大小、修改时间等信息。

文件重命名和移动:File类提供了方法来重命名文件或目录,以及移动文件到其他目录。

判断文件和目录:File类可以判断指定路径是文件还是目录,以便进行相应的操作。

遍历目录内容:File类可以遍历指定目录下的所有文件和子目录,从而实现文件系统的文件管理功能。

文件内容读写:虽然File类本身不提供读写文件内容的功能,但可以配合其他输入输出流类来实现文件内容的读取和写入操作。

3.2 创建File对象的方式.

  1. 通过文件路径字符串创建
String filePath = "path/to/file.txt";
File file = new File(filePath);

2.通过父目录和子文件/目录名称创建:

String parentDirectory = "path/to/directory";
String childFileName = "file.txt";
File file = new File(parentDirectory, childFileName);

4.文件操作:

4.1 文件的创建与删除。

下面通过一个案例演示如何使用File类的构造方法创建File对象

1 import java.io.File;
2 public class Test {
3    public static void main(String[] args) {
4        File f = new File("D:\\file\\a.txt");//使用绝对路径构造File对象
5        File f1 = new File("src\\Hello.java");//使用相对路径构造File对象
6        System.out.println(f);
 7       System.out.println(f1);
 8   }
9 }

 

上述代码中,1行代码导入了java.io下的File类,第4~5行代码分别在构造方法中传入了绝对路径和相对路径的方式创建File对象。

需要注意的是,在创建File对象时传入的路径使用了“\\”,这是因为在Windows中的目录符号为反斜线“\”,但反斜线“\”在Java中是特殊字符,表示转义符,所以使用反斜线“\”时,前面应该再添加一个反斜线,即为“\\”。除此之外,目录符号还可以用正斜线“/”表示,如:“D:/file/a.txt”。

4.2 File类的常用方法

File类提供了一系列方法,用于操作其内部封装的路径指向的文件或者目录。File类中的常用方法如

       方法声明

功能描述

boolean exists()

判断File对象对应的文件或目录是否存在,若存在则返回ture,否则返回false

boolean delete()

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

boolean createNewFile()

File对象对应的文件不存在时,该方法将新建一个此File对象所指定的新文件,若创建成功则返回true,否则返回false

String getName()

返回File对象表示的文件或文件夹的名称

String getPath()

返回File对象对应的路径

String getAbsolutePath()

返回File对象对应的绝对路径(Unix/Linux等系统上,如果路径是以正斜线/开始,则这个路径是绝对路径;在Windows等系统上,如果路径是从盘符开始,则这个路径是绝对路径)

String getParentFile()

返回File对象对应目录的父目录(即返回的目录不包含最后一级子目录)

       方法声明

功能描述

boolean exists()

判断File对象对应的文件或目录是否存在,若存在则返回ture,否则返回false

boolean delete()

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

boolean createNewFile()

File对象对应的文件不存在时,该方法将新建一个此File对象所指定的新文件,若创建成功则返回true,否则返回false

String getName()

返回File对象表示的文件或文件夹的名称

String getPath()

返回File对象对应的路径

String getAbsolutePath()

返回File对象对应的绝对路径(Unix/Linux等系统上,如果路径是以正斜线/开始,则这个路径是绝对路径;在Windows等系统上,如果路径是从盘符开始,则这个路径是绝对路径)

String getParentFile()

返回File对象对应目录的父目录(即返回的目录不包含最后一级子目录)

接下来,通过一个案例演示如何使用这些方法。

1 import java.io.IOException;
2 import java.io.File;
3 class Examole01 {
4    public static void main(String[] args) throws IOException {
5        //磁盘下创建文件
6        File file=new File("d:\\hello\\demo.txt");
7        if(file.exists()){                   //如果存在这个文件就删除,否则就创建
8            file.delete();
9        }else{
10            System.out.println(file.createNewFile());
11        }
12 //在磁盘下创建一层目录,并且在目录下创建文件文件
13        File fileDemo=new File("d:\\hello1\\demo.txt");
14        if(!(fileDemo.getParentFile().exists())){  //判断d:\demo目录是否存在
15            fileDemo.getParentFile().mkdir();
16        }
17        if(fileDemo.exists()){                //如果存在这个文件就删除,否则就创建
18            fileDemo.delete();
19        }else{
20            System.out.println(fileDemo.createNewFile());
21        }
22    }
23 }

 运行上述程序之后,在“d:\hello1”目录下会创建demo.txt文件,并且会创建hello1目录,并在hello1目录下创建demo.txt文件

4.3 遍历目录下的文件

File类的list()方法用于遍历指定目录下的所有文件,接下来通过一个案例来演示如何使用list()方法遍历目录文件

import java.io.File;
public class Example03{
	public static void main(String[] args) throws Exception {
         // 创建File对象,file.mkdir()创建文件目录对象
        //windows   Linux:Ubantu、命令操作
	File file = new File("D:/IdeaWorkspace/chapter07");  
	if (file.isDirectory()) { // 判断File对象对应的目录是否存在
	    String[] names = file.list (); // 获得目录下的所有文件的文件名
		for (String name : names) {
		     System.out.println(name);	// 输出文件名
		 }
		}
	}
}

 把以上代码稍作调整:文件路径调整成自己的一个文件夹,再运行看输出结果。

上述代码中,5行代码创建了一个File对象,并指定了一个路径,通过调用FileisDirectory()方法判断路径指向的是否为存在的目录,如果存在就调用list()方法,获得一个String类型的数组names,数组中包含这个目录下所有文件的文件名。接着通过循环遍历数组names,依次打印出每个文件的文件名。

上述程序实现了遍历一个目录下所有文件的功能,然而有时程序只是需要得到指定类型的文件,如获取指定目录下所有的“.java”文件。针对这种需求,File类中提供了一个重载的list(FilenameFilter filter)方法,该方法接收一个FilenameFilter类型的参数。FilenameFilter是一个接口,被称作文件过滤器,当中定义了一个抽象方法accept(File dir,String name)。在调用list()方法时,需要实现文件过滤器FilenameFilter,并在accept()方法中做出判断,从而获得指定类型的文件。

  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值