Java 比较路径(Windows/Linux)

Java 比较路径(Windows/Linux),java,linux,windows,kotlin,path,Java,Linux,Windows,Kotlin,Path,我想看看这两条路径中的一条是否在另一条路径内 这到底是什么意思?我最初给出了两个路径,我想看看这两个路径中的一个是否指向另一个路径中的文件夹 我认为最简单的方法如下: path1.startsWith(path2) || path2.startsWith(path1) 这段代码是用Kotting编写的 例如: path1 = C:\Users\username\baeldung\bar patht = C:\Users\username 这应该是真的。如果切换路径1和路径2,结果也应该为tr

我想看看这两条路径中的一条是否在另一条路径内

这到底是什么意思?我最初给出了两个路径,我想看看这两个路径中的一个是否指向另一个路径中的文件夹

我认为最简单的方法如下:

path1.startsWith(path2) || path2.startsWith(path1)
这段代码是用Kotting编写的

例如:

path1 = C:\Users\username\baeldung\bar
patht = C:\Users\username
这应该是真的。如果切换路径1和路径2,结果也应该为true

现在我想到了一个问题,因为我在比较路径,这些路径是否必须是标准路径,如果是,我的比较方法是否仍然适用于标准路径?据我所知,两条路径都不使用


因为我的程序应该在Windows和Linux机器上运行,不幸的是,我不知道Linux机器上的路径与Windows路径有什么不同。

为什么不直接使用
Path
类呢

/**
*如果[this]是[other]的父级,则为True。
*/
有趣的路径。parentOf(其他:路径?):布尔值{
如果返回(其他==null){
假的
}否则{
if(this==其他){
真的
}否则{
this.parentOf(other.parent)
}
}
}
/**
*如果其中一条路径位于另一条路径内,则为True。
*/
有趣的路径。oneInsideTheOther(其他:路径):布尔值{
返回this.parentOf(other)| | other.parentOf(this)
}
主要内容(){
val path1=path.get(“/Users/username/baeldung/bar”)
val path2=path.get(“/Users/username”)
println(路径1)
println(路径2)
println(路径1.parentOf(路径2))
println(路径2.parentOf(路径1))
println(路径1.oneInsideTheOther(路径2))
println(路径1::class.java)
}
输出:

/Users/username/baeldung/bar
/Users/username
false
true
true
class sun.nio.fs.UnixPath

Path
接口具有不同平台的不同实现。我运行的是Linux,所以我的实现是
JrtPath
UnixPath
ZipPath
,但在Windows上,我想会有
WindowsPath
而不是
UnixPath
。因此,为路径提供特定于平台的字符串。get()您将获得特定于平台的路径实现,它的父级(此代码的关键)将按预期工作。

为什么不使用路径类呢

/**
*如果[this]是[other]的父级,则为True。
*/
有趣的路径。parentOf(其他:路径?):布尔值{
如果返回(其他==null){
假的
}否则{
if(this==其他){
真的
}否则{
this.parentOf(other.parent)
}
}
}
/**
*如果其中一条路径位于另一条路径内,则为True。
*/
有趣的路径。oneInsideTheOther(其他:路径):布尔值{
返回this.parentOf(other)| | other.parentOf(this)
}
主要内容(){
val path1=path.get(“/Users/username/baeldung/bar”)
val path2=path.get(“/Users/username”)
println(路径1)
println(路径2)
println(路径1.parentOf(路径2))
println(路径2.parentOf(路径1))
println(路径1.oneInsideTheOther(路径2))
println(路径1::class.java)
}
输出:

/Users/username/baeldung/bar
/Users/username
false
true
true
class sun.nio.fs.UnixPath

Path
接口具有不同平台的不同实现。我运行的是Linux,所以我的实现是
JrtPath
UnixPath
ZipPath
,但在Windows上,我想会有
WindowsPath
而不是
UnixPath
。因此,为路径提供特定于平台的字符串。get()您将获得特定于平台的路径实现,它的父级(此代码的关键点)将按预期工作。

最简单的解决方案是按Path.separator分割路径,并比较结果数组,需要注意的是,您可能需要处理根部分。最简单的解决方案是按path.separator分割路径,并将结果数组与可能需要处理根部分的注意事项进行比较。