How to escape forward slash in java so that to use it in path

后端 未结 5 2145
生来不讨喜
生来不讨喜 2020-12-19 14:53

I am trying to escape forward slash in String which can be used in path using Java.
For example: String:: \"Test/World\"
Now I want to use above string

相关标签:
5条回答
  • 2020-12-19 15:05

    We are trying to solve exactly the same problem (using filesystem path as node name in zookeeper) a we haven't found a way how to have '/' in node name.

    Solution would be either to replace '/' with some character, that cannot appear in your node name. For paths that would be '/' or '\0', which wont help us in this case.

    Other possibility is to replace '/' with string of characters allowed in node name, e.g. "Test/World" -> "Test%@World", "Test%World" -> "Test%%World" and add escaping/de-escaping to saving and loading.

    If there is any more straightforward way, I'd love to hear it.

    0 讨论(0)
  • 2020-12-19 15:06

    Let me rephrase your question. You are trying to create a node in zookeeper and it should be /zookeeper/HelloWorld/NodeName. But the last part "NodeName" is actually "Test/World", and you are looking for ways to escape "/" so the node name can be "Test/World".

    I don't think it would work escaping the char, unless you tried with unicode.

    Try \u002F which is the equivalent for /.

    0 讨论(0)
  • 2020-12-19 15:12

    In order to escape a character in Java use "\" for example:

    String strPath = "directory\\file.txt".
    

    I believe you do not need to escape forward slashes such as: "/"

    0 讨论(0)
  • 2020-12-19 15:27

    I don't know anything about Zookeeper. But it looks to me as though you're trying to keep a list of strings like "zookeeper", "HellowWorld", "Test/World", that you then want to use either to create Zookeeper nodes or to create a pathname in a file system. (I'm assuming that if you're working with a file system, you're going to have a subdirectory Test and a file or subdirectory World in the Test subdirectory. If you're actually trying to create a single file or directory named Test/World, give up. Both Linux and Windows will fight with you.)

    If that's the case, then don't try to represent the "path" as a simple String that you pass around in your program. Instead, represent it as a String[] or ArrayList<String>, and then convert it to a filesystem path name only when you need a filesystem path name. Or, better, define your own class with a getFilesystemPath method. Converting your list of node names to a pathname String too early, and then trying to reconstruct the list from the String later, is a poor approach because you throw away data that you need later (in particular, you're throwing away information about which / characters are separators and which ones are part of node names).

    EDIT: If you also need a single path name for Zookeeper, as you mentioned in another comment, I can't help you since I don't know Zookeeper and haven't found anything in a quick look at the docs. If there is a way to escape the slash for Zookeeper, then I still recommend defining your own class, with a getFilesystemPath method and a getZookeeperPath method, since the two methods will probably return different Strings in certain cases. The class would internally keep the names as an array or ArrayList.

    0 讨论(0)
  • 2020-12-19 15:29

    You should know about File.separator ... This is safer than \ or / because Linux and Windows use different file separators. Using File.separator will make your program run regardless of the platform it is being run on, after all, that is the point of the JVM. -- forward slash will work, however, File.separator will make you end users more confident that it will.

    And you don't need to escape "/ ... you should also see the answer to this question

    String fileP = "Test" + File.separator + "World";
    
    0 讨论(0)
提交回复
热议问题