如何解决Java文件路径无效异常「InvalidPathException」

1. 异常 "InvalidPathException" 是什么

Java 中的 "InvalidPathException" 是一个受检异常,表示一个指定的路径字符串无效。当使用 Java 中的 Paths.get() 方法从文件系统获取一个路径时,如果指定的路径字符串无效,则会抛出该异常。

2. InvalidPathException 报错的常见原因

InvalidPathException 的报错原因主要有以下几个方面:

2.1 路径中包含非法字符或空格

路径字符串中不合法的字符会导致 InvalidPathException 的抛出。例如,文件名中包含空格、非法字符(如: %)、或者路径字符串中包含连续的多个分隔符等,都可能导致 InvalidPathException 的抛出。

2.2 路径中不存在的文件或目录

如果指定的路径名中包含的目录或文件不存在,则会抛出 InvalidPathException 异常。

2.3 $符号和圆点符号不能带有任何其他内容

Java 在处理文件系统路径字符串时,会自动替换 "$"、"." 等字符,而如果这些字符本身并非路径合法字符,如果在它们的周围包含了其他字符,则会导致 InvalidPathException 抛出。

3. 解决 InvalidPathException 异常的方法

3.1 去掉路径中的空格和非法字符

当路径字符串中包含非法字符或者空格时,可以使用正则表达式去掉这些字符或者空格,来创建路径。示例代码如下:

String fileName = "A&B.txt";

Path path = Paths.get(fileName.replaceAll("[^a-zA-Z0-9.-]", ""));

3.2 判断路径中的文件或目录是否存在

在使用路径字符串来创建路径之前,可以通过 Java 的 Files.exists() 方法检查文件或目录是否存在,如果不存在则先创建所需的目录或文件:

String fileName = "E:\\没有的文件夹\\a.txt";

Path path = Paths.get(fileName);

if(Files.notExists(path)) {

Files.createDirectories(path.getParent());

Files.createFile(path);

}

3.3 使用 URI 创建路径

在一些特殊情况下,可以考虑使用 URI 创建路径,因为 URI 规定了路径字符串的格式,不会出现一些 Java 中定义的非法字符。示例代码如下:

URI uri = new URI("file:///C:/a/b.txt");

Path path = Paths.get(uri);

if(Files.notExists(path)) {

Files.createDirectories(path.getParent());

Files.createFile(path);

}

3.4 使用系统相关的路径分隔符替换字符串

使用 Java 的 File.separator 可以得到系统使用的路径分隔符,只要替换掉字符串中不符合要求的分隔符即可,示例代码如下:

String filePath = "d:" + File.separator + "a" + File.separator + "b.txt";

Path path = Paths.get(filePath);

if(Files.notExists(path)) {

Files.createDirectories(path.getParent());

Files.createFile(path);

}

4. 总结

本文主要介绍了 Java 中 InvalidPathException 指定的路径字符串无效的原因,并提供了几种解决方案。根据程序所在的环境和要求,选择不同的解决方法即可,能够有效避免在程序运行中发生 InvalidPathException 异常的情况。

后端开发标签