How to get the path string from a java.nio.Path?

JavaFileNio

Java Problem Overview


Rewrote question with more info

I have some code that creates a Path object using relative paths, like this: Paths.get("..", "folder").resolve("filename"). Later, I want to get the path string "..\folder\filename" from it (I'm on windows, so backslashes). When I run this code using manual compile or from Eclipse, this works fine.

However, when I run it using Maven, it doesn't work any more. The toString() method returns [.., folder, filename] instead of an actual path string. Using path.normalize() doesn't help. Using path.toFile().getPath() does return what I'm looking for, but I feel there should be a solution using just the nio.path API.

Java Solutions


Solution 1 - Java

Use:

Paths.get(...).normalize().toString()

Another solution woul be:

Paths.get(...).toAbsolutePath().toString()

However, you get strange results: Paths.get("/tmp", "foo").toString() returns /tmp/foo here. What is your filesystem?

Solution 2 - Java

To complete the the fge's answer, I would add some info:

  1. normalize() simply removes redundant pieces of strings in your path, like . or ..; it does not operate at the OS level or gives you an absolute path from a relative path
  2. toAbsolutePath() on the contrary gives you what the name says, the absolute path of the Path object. But...
  3. toRealPath() resolves also soft and hard links (yes they exists also on Windows, so win user, you're not immune). So it gives to you, as the name says, the real path.

So what's the best? It depends, but personally I use toRealPath() the 99% of the cases.

Source: Official javadoc

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJornView Question on Stackoverflow
Solution 1 - JavafgeView Answer on Stackoverflow
Solution 2 - JavaMarco SullaView Answer on Stackoverflow