如何在 Java 1.7 中将文件路径转换为有效的文件路径

Pau*_*lor 5 java filesystems nio nio2

使用 Java 1.6 文件路径可以由用户输入,然后我应用各种正则表达式来删除对平台无效的字符(例如 '?' 在 Windows 上无效),并检查路径长度以确保我们最终得到一个有效的文件路径在尝试创建文件路径之前为操作系统。

但是有两个问题:

  1. 确定每个平台有效或无效的方法很痛苦。
  2. 我根据平台的默认文件系统做出假设,但当然 OSX 系统可能正在写入非 Mac 文件系统,例如 FAT32,在这种情况下,这些检查将无效。

所以我希望在 Java 7 中使用 NIO2 会有更好的方法,但还没有找到解决方案,有吗?

nce*_*rar 5

根据您的预期结果(更正的字符串?无效的字符位置?异常?),这应该让您了解可以做什么:

import java.io.File;
import java.nio.file.InvalidPathException;
public class Test {
    public static final void main(final String[] args) {
        final String current = new File(".").toPath().toAbsolutePath().normalize().toFile().toString();
        Test.correctPath(current);
        Test.correctPath(current + "aValidExpression");
        Test.correctPath(current + "aValidExpression?;:-&é");
        Test.correctPath(current + "aValidExpr//ession?;:-&é");
        Test.correctPath(current + "aValidExpre\\ssion?;:-&é");
    }

    public static final String correctPath(final String path) {
        try {
            final String returnValue = new File(path).toPath().toAbsolutePath().normalize().toFile().toString();
            System.out.println(returnValue);
            return returnValue;
        } catch (final InvalidPathException e) {
            System.err.println(e.getMessage());
            final int errorIndex = e.getIndex();
            final String newPath = path.substring(0, errorIndex - 1) + path.substring(errorIndex + 1);
            return Test.correctPath(newPath);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望它有帮助。