Java File类的使用

目录

Java File类的使用

NIO.2中Path、Paths、Files类的使用


Java File类的使用

概述

java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关。

File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。 

想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对 象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。

File对象可以作为参数传递给流的构造器。

常用构造器

序号构造方法及描述
1

public File(String pathname)
以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。

        绝对路径:是一个固定的路径,从盘符开始
        相对路径:是相对于某个位置开始

2public File(String parent, String child)
以parent为父路径,child为子路径创建File对象。
3public File(File parent, String child)
根据一个父File对象和子文件路径创建File对象。

路径分隔符

路径中的每级目录之间用一个路径分隔符隔开。

路径分隔符和系统有关:windows和DOS系统默认使用“\”来表示,UNIX和URL使用“/”来表示。

Java程序支持跨平台运行,因此路径分隔符要慎用。为了解决这个隐患,File类提供了一个常量:public static final String separator。根据操作系统,动态的提供分隔符。

File file1 = new File("D:\\test\\info.txt");
File file2 = new File("D:" + File.separator + "test" + File.separator + "info.txt");
File file3 = new File("D:/test");

常用方法

序号方法及描述
1

public String getAbsolutePath()
获取绝对路径

2public String getPath()
获取路径
3public String getName()
获取名称
4

public String getParent()

获取上层文件目录路径。若无,返回null

5

public long length()

获取文件长度(即:字节数)。不能获取目录的长度

6

public long lastModified()

获取最后一次的修改时间,毫秒值

7

public String[] list()

获取指定目录下的所有文件或者文件目录的名称数组

8

public File[] listFiles()

获取指定目录下的所有文件或者文件目录的File数组

9

public boolean renameTo(File dest)

把文件重命名为指定的文件路径

10

public boolean isDirectory()

判断是否是文件目录

11

public boolean isFile()

判断是否是文件

12

public boolean exists()

判断是否存在

13

public boolean canRead()

判断是否可读

14

public boolean canWrite()

判断是否可写

15

public boolean isHidden()

判断是否隐藏

16

public boolean createNewFile()

创建文件。若文件存在,则不创建,返回false

17

public boolean mkdir()

创建文件目录。如果此文件目录存在,就不创建了。

如果此文件目录的上层目录不存在,也不创建。

18

public boolean mkdirs()

创建文件目录。如果上层文件目录不存在,一并创建。

注意事项:如果你创建文件或者文件目录没有写盘符路径,那么,默认在项目路径下。

19

public boolean delete()

删除文件或者文件夹。

删除注意事项:Java中的删除不走回收站。 要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录。

创建目录和文件

File dir1 = new File("D:/IOTest/dir1");
if (!dir1.exists()) { // 如果D:/IOTest/dir1不存在,就创建为目录
    dir1.mkdir();
}
// 创建以dir1为父目录,名为"dir2"的File对象
File dir2 = new File(dir1, "dir2");
if (!dir2.exists()) { // 如果还不存在,就创建为目录
    dir2.mkdirs();
}
File dir4 = new File(dir1, "dir3/dir4");
if (!dir4.exists()) {
    dir4.mkdirs();
}
// 创建以dir2为父目录,名为"test.txt"的File对象
File file = new File(dir2, "test.txt");
if (!file.exists()) { // 如果还不存在,就创建为文件
    file.createNewFile();
}

读取目录

一个目录其实就是一个 File 对象,它包含其他文件和文件夹。如果创建一个 File 对象并且它是一个目录,那么调用 isDirectory() 方法会返回 true。可以通过调用该对象上的 list() 方法,来提取它包含的文件和文件夹的列表。

String dirname = "/tmp";
File f1 = new File(dirname);
if (f1.isDirectory()) {
    System.out.println("目录 " + dirname);
    String s[] = f1.list();
    for (int i = 0; i < s.length; i++) {
        File f = new File(dirname + "/" + s[i]);
        if (f.isDirectory()) {
            System.out.println(s[i] + " 是一个目录");
        } else {
            System.out.println(s[i] + " 是一个文件");
        }
    }
} else {
    System.out.println(dirname + " 不是一个目录");
}

删除目录和文件

public static void main(String[] args) {
    // 这里修改为自己的测试目录
    File folder = new File("/tmp/java/");
    deleteFolder(folder);
}
// 删除文件及目录
public static void deleteFolder(File folder) {
    File[] files = folder.listFiles();
    if (files != null) {
        for (File f : files) {
            if (f.isDirectory()) {
                deleteFolder(f);
            } else {
                f.delete();
            }
        }
    }
    folder.delete();
}

NIO.2中Path、Paths、Files类的使用

Java NIO概述

Java NIO (New IO,Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的(IO是面向流的)、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。

Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。

|-----java.nio.channels.Channel
        |-----FileChannel:处理本地文件
        |-----SocketChannel:TCP网络编程的客户端的Channel
        |-----ServerSocketChannel:TCP网络编程的服务器端的Channel
        |-----DatagramChannel:UDP网络编程中发送端和接收端的Channel

随着 JDK 7 的发布,Java对NIO进行了极大的扩展,增强了对文件处理和文件系统特性的支持,以至于我们称他们为 NIO.2。因为 NIO 提供的一些功能,NIO已经成为文件处理中越来越重要的部分。

Path、Paths和Files核心API

早期的Java只提供了一个File类来访问文件系统,但File类的功能比较有限,所提供的方法性能也不高。而且,大多数方法在出错时仅返回失败,并不会提供异常信息。

NIO. 2为了弥补这种不足,引入了Path接口,代表一个平台无关的平台路径,描述了目录结构中文件的位置。Path可以看成是File类的升级版本,实际引用的资源也可以不存在。

在以前IO操作都是这样写的:

import java.io.File;
File file = new File("index.html");

但在Java7 中,我们可以这样写:

import java.nio.file.Path; 
import java.nio.file.Paths; 
Path path = Paths.get("index.html");

同时,NIO.2在java.nio.file包下还提供了Files、Paths工具类,Files包含了大量静态的工具方法来操作文件;Paths则包含了两个返回Path的静态工厂方法。

Paths 类提供的静态 get() 方法用来获取 Path 对象:
        static Path get(String first, String … more) : 用于将多个字符串串连成路径
        static Path get(URI uri): 返回指定uri对应的Path路径

Path接口

序号方法及描述
1

String toString()

返回调用 Path 对象的字符串表示形式

2boolean startsWith(String path)
判断是否以 path 路径开始
3boolean endsWith(String path)
判断是否以 path 路径结束
4

boolean isAbsolute()

判断是否是绝对路径

5

Path getParent()

返回Path对象包含整个路径,不包含 Path 对象指定的文件路径

6

Path getRoot()

返回调用 Path 对象的根路径

7

Path getFileName()

返回与调用 Path 对象关联的文件名

8

int getNameCount()

返回Path 根目录后面元素的数量

9

Path getName(int idx)

返回指定索引位置 idx 的路径名称

10

Path toAbsolutePath()

作为绝对路径返回调用 Path 对象

11

Path resolve(Path p)

合并两个路径,返回合并后的路径对应的Path对象

12

File toFile()

将Path转化为File类的对象

Files 类

java.nio.file.Files 用于操作文件或目录的工具类。

序号方法及描述
1

Path copy(Path src, Path dest, CopyOption … how)

文件的复制

2Path createDirectory(Path path, FileAttribute<?> … attr) 
创建一个目录
3Path createFile(Path path, FileAttribute<?> … arr)
创建一个文件
4

void delete(Path path)

删除一个文件/目录,如果不存在,执行报错

5

void deleteIfExists(Path path)

Path对应的文件/目录如果存在,执行删除

6

Path move(Path src, Path dest, CopyOption…how)

将 src 移动到 dest 位置

7

long size(Path path)

返回 path 指定文件的大小

8

boolean exists(Path path, LinkOption … opts)

判断文件是否存在

9

boolean isDirectory(Path path, LinkOption … opts)

判断是否是目录

10

boolean isRegularFile(Path path, LinkOption … opts)

判断是否是文件

11

boolean isHidden(Path path)

判断是否是隐藏文件

12

boolean isReadable(Path path)

判断文件是否可读

13

boolean isWritable(Path path)

判断文件是否可写

14

boolean notExists(Path path, LinkOption … opts)

判断文件是否不存在

15

SeekableByteChannel newByteChannel(Path path, OpenOption…how)

获取与指定文件的连接,how 指定打开方式

16

DirectoryStream<Path> newDirectoryStream(Path path)

打开 path 指定的目录

17

InputStream newInputStream(Path path, OpenOption…how)

获取 InputStream 对象

18

OutputStream newOutputStream(Path path, OpenOption…how)

获取 OutputStream 对象



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值