[google/guava]使用类 Path 来表示路径而不是字符串。

2024-04-24 370 views
0

字符串可用于表示文件系统路径,即使某些类是专门为此任务设计的。例如,java.nio.Path。将变量的类型更改为 Path 很有用,因为字符串可以以不规范的方式组合,这可能会导致无效路径。其次,不同的操作系统使用不同的文件分隔符,这可能会导致错误。

回答

2

这对我来说似乎是一个很好的改变!这对我来说并不是很明显,但我现在看到,将字符串打包到 a 中Path(即使我们随后立即将其解包)可以确保在传递的字符串不代表有效路径时抛出异常。

因此,作为一名非 Google 员工,这一更改收到了我的 :+1:。

2

不过,我想知道这个更改是否适用于 Android?安卓现在有吗java.nio.file.Path? :思维:

2

如果是这样,File该方法的参数是否也应该getClassPathEntry(File, String)更改为 a ?Path

0

或者甚至是String与此相关的参数?

7

这种不安全的使用情况还有更多吗?

1

我认为重要的是要注意,大多数支持和反对使用 Path 而不是 String 的原因也适用于 File,并且了解为什么在这些情况下尚未使用 File 会很有用。

我不认为它是路径或文件,不能保证它作为路径“有效”。通过进行额外的检查,可能会提高几率 - 但可能有几条路径实际上是有效的,但无法用路径表示。例如...当我调用“mv some_file some_directory”时,我通常会拼写“mv some_file some_directory/”,因为结尾的“/”在Unix路径中是有效的,并且在“mv”的情况下,它将断言目标是可能覆盖同名文件之前的目录:

$ touch x
$ touch y
$ mv x y/
mv: failed to access 'y/': Not a directory
$ mv x y
$ ls -l x y
ls: cannot access 'x': No such file or directory
-rw-rw-r-- 1 mark mark 0 Dec 24 19:07 y

A PathorFile在处理过程中会产生额外的开销,以确保其有效并跟踪它。至少,它是String包装在另一个类对象中的。但是,每次更改或表示都可能需要额外的处理。从运行时String角度切换所有内容Path或从运行时角度切换所有内容的性能开销是多少File?还需要多少内存?还需要多少CPU?.toString()通常所说的如何实现?

Path一般来说,我喜欢and的想法File,这就是为什么我长期以来在适当的地方使用它们,并且我开始在 Java 7 及更高版本中将File它们切换到这些。Path然而,我不认为它属于任何地方。举个例子 - 有时整数存储在字符串中。虽然有时将其表示为整数是有意义的,但有时将其保留为字符串更简单、更快。

0

据我了解所讨论的方法,它用于构造一个指向 jar 文件内某些内容的 URL。特别是,字符串参数用于表示给定(jar-)文件内的路径。

APath严重依赖于本地操作系统和文件系统。例如,在 Windows 下,Paths.get(...)将返回与 Linux 下不同的 Path 实现。 jar 文件的内容(或者特别是引用它的方式)肯定与本地主机的文件系统无关,因此在这种情况下使用 Path 似乎是错误的做法。

3

我将关闭它,因为尚不清楚要解决的问题是什么。请随意重新进行演示问题的测试,我们可以查看一下。