为了账号安全,请及时绑定邮箱和手机立即绑定

将目录路径与另一个路径分割

将目录路径与另一个路径分割

慕桂英4014372 2023-12-10 09:52:21
我使用 java 中的系统属性读取目录路径,它在 Windows 和基于 Linux 的系统中都可以工作。现在我需要将此路径与路径的一部分分开以检索其余部分。例如。,C:\Test1\Test2\Test3\Test4我需要将上面的路径与C:\Test1\Test2并检索分开Test3\Test4。当我将其作为字符串获取并使用split函数时,由于字符的原因,该函数将给我错误作为非法字符"\"。如果我打算用 转义这个字符"\\",这可能在 Linux 中不起作用。有没有办法让我在 Linux 和 Windows 上都可以工作?
查看完整描述

4 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

使用以下方法。


 //Windows

   String s = "C:\\Test1\\Test2\\Test3\\Test4";

   String[] output = s.split(("/".equals(File.separator))? File.separator : "\\\\" );

   //output: [C:, Test1, Test2, Test3, Test4]


 //Linux:

   String linuxString = "/Test1/Test2/Test3/Test4";

   String[] linuxOutput = linuxString.split(("/".equals(File.separator))? File.separator : "\\\\" );

   //output: [, Test1, Test2, Test3, Test4]

希望这能解决这个问题。


查看完整回答
反对 回复 2023-12-10
?
慕森王

TA贡献1777条经验 获得超3个赞

传递给的模式String.split具有正则表达式语法,因此该java.util.regex包是寻找处理它们的其他工具的地方,例如引用字符串来强制文字匹配。


因此,仅使用系统属性和字符串操作的解决方案如下所示


String path=System.getProperty("your.property"), sep=System.getProperty("file.separator");

for(String s: path.split(Pattern.quote(sep)))

    System.out.println(s);

但是,没有理由不使用专用 API:


Path path = Paths.get(System.getProperty("your.property"));

if(path.isAbsolute()) System.out.println(path.getRoot());

for(Path p: path)

    System.out.println(p);

请注意,这也可以正确处理根路径,即在 Windows 上,驱动器的根类似于C:\, not C:,而在 Linux 上,根是/, 不是空字符串,并且当仅在分隔符处拆分时,这两种情况都无法正确处理。


甚至在 Java 7 之前,就有一个 API 可以处理这个问题:


File path = new File(System.getProperty("your.property"));

for(File f = path; f != null; f = f.getParentFile())

    System.out.println(f.getName().isEmpty()? f.getPath(): f.getName());

尽管代码将以相反的顺序迭代元素。


请注意,使用专用 API,在路径上方的两个级别进行拆分的特定任务变得多么简单:


Path path = Paths.get(System.getProperty("your.property"));

Path first = path.getParent().getParent(), second = first.relativize(path);


System.out.println("first: "+first);

System.out.println("second: "+second);


查看完整回答
反对 回复 2023-12-10
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

您正在寻找File.separator. 用它来分割你的字符串。

从文档中,

与系统相关的默认名称分隔符,为方便起见,表示为字符串。


查看完整回答
反对 回复 2023-12-10
?
波斯汪

TA贡献1811条经验 获得超4个赞

构建文件路径时可以使用分隔符。

使用 java.io.File.separator


查看完整回答
反对 回复 2023-12-10
  • 4 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信