Java基础笔记 - Java IO介绍以及File类的介绍和基本使用

发布于 2011-10-20 | 更新于 2020-09-20

1、Java I/O

通过数据流、序列化和文件系统提供系统输入和输出。

Java把这些不同来源和目标的数据都统一抽象为数据流。Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象。

在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流。

1.1、Java流的分类

按流向分:

  • 输入流: 程序可以从中读取数据的流。
  • 输出流: 程序能向其中写入数据的流。

按数据传输单位分:

  • 字节流: 以字节为单位传输数据的流
  • 字符流: 以字符为单位传输数据的流

按功能分:

  • 节点流: 用于直接操作目标设备的流
  • 过滤流: 是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能。

1.2、java.io常用类

JDK所提供的所有流类位于java.io包中,都分别继承自以下四种抽象流类:

  • InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。
  • OutputSteam:继承自OutputStream的流都是程序用于向外输出数据的,且数据单位都是字节(8位)。
  • Reader:继承自Reader的流都是用于向程序中输入数据的,且数据单位都是字符(16位)。 Writer:继承自
  • Writer的流都是程序用于向外输出数据的,且数据单位都是字符(16位)。

2、File类的介绍:

public class File extends Object implements Serializable, Comparable

文件和目录路径名的抽象表示形式。

File既可以表示文件也可以表示目录。

用户界面和操作系统使用与系统相关的路径名字符串 来命名文件和目录。此类呈现分层路径名的一个抽象的、与系统无关的视图。抽象路径名 有两个组件:

1. 一个可选的与系统有关的前缀 字符串,比如盘符,“/” 表示 UNIX 中的根目录,“\\\” 表示 Microsoft Windows UNC 路径名。

  1. 零个或更多字符串名称 的序列。

2.1、构造方法:

File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 File(URI uri) 通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。

2.2、关于文件的路径:

在处理 UNIX 平台的根目录,以及 Microsoft Windows 平台的盘符、根目录和 UNC 路径名时,将用到前缀这一概念。如下所示:

  • 对于 UNIX 平台,绝对路径名的前缀始终是 “/”。相对路径名没有前缀。表示根目录的绝对路径名的前缀为 “/” 且名称序列为空。
  • 对于 Microsoft Windows 平台,包含盘符的路径名前缀由驱动器号和一个 “:” 组成。如果路径名是绝对路径名,还可能后跟 "\"。UNC 路径名的前缀是 “\\\”;主机名和共享名是名称序列中的前两个名称。没有指定驱动器的相对路径名没有前缀。 (D:\\Java)

一般推荐都写成”/”使得在UNIX和Windows下通用。或者使用File类的一个静态变量:

static String separator

与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。

File file = new File(File.separator);

在Windows系统中表示class文件所在的分区的根目录。

2.3、文件管理:

创建文件

当创建完File对象时,通过调用其createNewFile()方法在相应的目录下创建文件(此方法创建的不是文件夹)

boolean createNewFile()

当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。

2.4、目录管理:

创建目录

boolean mkdir()

创建此抽象路径名指定的目录。

列出目录中的文件和目录

String[] list()

返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。

File[] listFiles()

返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。

判断是文件还是目录

boolean isDirectory()

测试此抽象路径名表示的文件是否是一个目录。

boolean isFile()

测试此抽象路径名表示的文件是否是一个标准文件。

判断文件或目录是否存在

boolean exists()

测试此抽象路径名表示的文件或目录是否存在。

删除文件或目录:

boolean delete()

删除此抽象路径名表示的文件或目录。

返回文件或目录的名称

String getName()

返回由此抽象路径名表示的文件或目录的名称。

将路径转换为字符串

String getPath()

将此抽象路径名转换为一个路径名字符串。

判断路径或文件是否可读和可写

boolean canRead()

测试应用程序是否可以读取此抽象路径名表示的文件。

boolean canWrite()

测试应用程序是否可以修改此抽象路径名表示的文件。

2.5、创建File并在硬盘上生成文件:

调用File(String pathname)构造方法:

1
2
3
4
5
6
7
8
public static void main(String[] args) {
File file = new File("D:/filetest");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}

调用File(File parent, String child)构造方法:

1
2
3
4
5
6
File file = new File("D:/itzhai");
if(!file.exists()){
file.mkdir();
}
File file2 = new File(file, "arthinking.txt");
file2.createNewFile();

2.6、使用FilenameFilter过滤文件:

java.io 接口 FilenameFilter ____________________________________ public interface FilenameFilter

实现此接口的类实例可用于过滤器文件名。

Abstract Window Toolkit 的文件对话框组件使用这些实例过滤 File 类的 list 方法中的目录清单。

FilenameFilter里面只定义了一个方法,该方法被文件列表中的每个文件调用一次:

boolean accept(File dir, String name)

测试指定文件是否应该包含在某一文件列表中。

参数:

dir - 被找到的文件所在的目录。

name - 文件的名称。

返回: 当且仅当该名称应该包含在文件列表中时返回 true;否则返回 false。

通过调用File的以下方法过滤:

String[] list(FilenameFilter filter)

返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
File file = new File("D:/itzhai");
String [] filenames = file.list(new FilenameFilter(){
@Override
public boolean accept(File dir, String name) {
if(name.endsWith(".txt")){
return true;
}
return false;
}
});

for(String filename : filenames){
System.out.println(filename);
}

本文作者: arthinking

本文链接: https://www.itzhai.comjava-based-notebook-java-io-and-file-class-describes-the-basic-introduction-and-use-of.html

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。

×
IT宅

关注公众号及时获取网站内容更新。