簡體   English   中英

Java:如何使用nio Path規范化路徑?

[英]Java: how to normalize paths with nio Path?

關於java.io.File一個非常好的事情是它可以將路徑規范化可預測的格式

new File("/", inputPath).getPath()始終返回一個字符串,其相對路徑已標准化,並始終以可預測的路徑分隔符開頭和結尾。

有沒有辦法用新的nio PathPaths類做到這一點?

(另請注意,我正在處理其他系統的抽象路徑,這與任何本地文件系統無關)

我想要的更多行為示例:

 - "/foo" -> "/foo"
 - "//foo/" -> "/foo"
 - "foo/" -> "/foo"
 - "foo/bar" -> "/foo/bar"
 - "foo/bar/../baz" -> "/foo/baz"
 - "foo//bar" -> "/foo/bar"

此代碼有效:

public final class Foo
{
    private static final List<String> INPUTS = Arrays.asList(
        "/foo", "//foo", "foo/", "foo/bar", "foo/bar/../baz", "foo//bar"
    );

    public static void main(final String... args)
    {
        Path path;

        for (final String input: INPUTS) {
            path = Paths.get("/", input).normalize();
            System.out.printf("%s -> %s\n", input, path);
        }
    }
}

輸出:

/foo -> /foo
//foo -> /foo
foo/ -> /foo
foo/bar -> /foo/bar
foo/bar/../baz -> /foo/baz
foo//bar -> /foo/bar

但請注意,這不是便攜式的。 它不適用於Windows機器......

如果你想要一個可移植的解決方案,你可以使用memoryfilesystem ,打開一個Unix文件系統並使用它:

try (
    final FileSystem fs = MemoryFileSystem.newLinux().build();
) {
    // path operations here
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM