hadoop—如何在java中转义正斜杠,以便在路径中使用它

mftmpeh8  于 2021-06-03  发布在  Hadoop
关注(0)|答案(5)|浏览(709)

我试图在字符串中转义正斜杠,它可以在使用java的路径中使用。
例如: String:: "Test/World" 现在我想使用上面的字符串路径 "Test/World" 会像在路上一样来。抱歉,如果它是重复的,但我找不到任何令人满意的解决办法。我的目的是使用上面的字符串在zookeeper中创建节点。
例子:
如果我使用下面的字符串在zokkeeper中创建节点,那么我应该将“test/world”作为一个单独的节点而不是单独的节点。zookeeper接受“/”作为路径分隔符,在某些情况下我不需要它。 /zookeeper/HellowWorld/Test/World 谢谢

v7pvogib

v7pvogib1#

我对Zookeeper一无所知。但在我看来,你好像在试图保存一个字符串列表,比如 "zookeeper", "HellowWorld", "Test/World" ,然后要使用它来创建zookeeper节点或在文件系统中创建路径名(我假设如果你使用的是一个文件系统,你会有一个子目录 Test 以及一个文件或子目录 WorldTest 子目录。如果您确实要创建一个名为 Test/World ,放弃。linux和windows都将与您抗争。)
如果是这样的话,那么就不要试图把“路径”表示为一个简单的 String 你在你的程序中传递的信息。相反,将其表示为 String[] 或者 ArrayList<String> ,然后仅在需要文件系统路径名时才将其转换为文件系统路径名。或者,更好的方法是用 getFilesystemPath 方法。将节点名列表转换为路径名 String 太早了,然后试图从 String 稍后,是一种糟糕的方法,因为您会丢弃稍后需要的数据(特别是,您正在丢弃有关哪些数据的信息) / 字符是分隔符,哪些是节点名称的一部分)。

**编辑:**如果你还需要一个单一的路径名为zookeeper,正如你在另一个评论中提到的,我不能帮助你,因为我不知道zookeeper,也没有找到任何在快速查看文档。如果有办法避开zookeeper的斜杠,那么我仍然建议您使用 getFilesystemPath 方法和步骤 getZookeeperPath 方法,因为这两个方法可能返回不同的 String 在某些情况下是不安全的。该类将在内部将名称作为数组或 ArrayList .

ljsrvy3e

ljsrvy3e2#

要在java中转义字符,请使用“\”,例如:

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

我相信你不需要逃避前斜杠,如:“/”

bd1hkmkf

bd1hkmkf3#

你应该知道 File.separator ... 这比 \ 或者 / 因为linux和windows使用不同的文件分隔符。使用 File.separator 不管程序运行在哪个平台上,它都会使程序运行,毕竟这是jvm的要点不过,正斜杠也行, File.separator 会让你的终端用户更加自信。
你不需要逃跑 "/ ... 你也应该看到这个问题的答案

String fileP = "Test" + File.separator + "World";
p8ekf7hl

p8ekf7hl4#

我们正试图解决完全相同的问题(在zookeeper中使用文件系统路径作为节点名)a我们还没有找到在节点名中使用“/”的方法。
解决方案是将“/”替换为某些不能出现在节点名称中的字符。对于路径为“/”或“\0”,在这种情况下对我们没有帮助。
另一种可能是将“/”替换为节点名称中允许的字符串,例如“test/world”->“test%@world”,“test%world”->“test%%world”,并将转义/反转义添加到保存和加载中。
如果有更直接的方法,我很乐意听。

wb1gzix0

wb1gzix05#

让我重新表述一下你的问题。您正在尝试在zookeeper中创建一个节点,它应该是/zookeeper/helloworld/nodename。但最后一部分“nodename”实际上是“test/world”,您正在寻找转义“/”的方法,因此节点名可以是“test/world”。
我认为转义字符是行不通的,除非您尝试使用unicode。
请尝试\u002f,它相当于/。

相关问题