猿问

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

我使用 java 中的系统属性读取目录路径,它在 Windows 和基于 Linux 的系统中都可以工作。现在我需要将此路径与路径的一部分分开以检索其余部分。例如。,C:\Test1\Test2\Test3\Test4

我需要将上面的路径与C:\Test1\Test2并检索分开Test3\Test4。当我将其作为字符串获取并使用split函数时,由于字符的原因,该函数将给我错误作为非法字符"\"。如果我打算用 转义这个字符"\\",这可能在 Linux 中不起作用。有没有办法让我在 Linux 和 Windows 上都可以工作?


慕桂英4014372
浏览 160回答 4
4回答

拉莫斯之舞

使用以下方法。 //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]希望这能解决这个问题。

慕森王

传递给的模式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);

慕桂英3389331

您正在寻找File.separator. 用它来分割你的字符串。从文档中,与系统相关的默认名称分隔符,为方便起见,表示为字符串。

波斯汪

构建文件路径时可以使用分隔符。使用 java.io.File.separator
随时随地看视频慕课网APP

相关分类

Java
我要回答