web-dev-qa-db-ja.com

Javaでスラッシュをエスケープして、パスで使用する方法

Javaを使用したパスで使用できるStringのスラッシュをエスケープしようとしています。
例:String:: "Test/World"
次に、上記の文字列パスを使用します。同時に、"Test/World"がパスにあるとおりに表示されることを確認する必要があります。重複している場合は申し訳ありませんが、これに対する満足のいく解決策は見つかりませんでした。私の目的は、上記の文字列を使用してZookeeperにノードを作成することです。
例:
次の文字列を使用してZokkeeperにノードを作成する場合、「Test/World」を個別ではなく単一のノードとして取得する必要があります。 Zookeeperは、パス区切り文字として「/」を受け入れますが、場合によっては必要ありません。 /zookeeper/HellowWorld/Test/World

ありがとう

3
Frank

File.separatorについて知っておく必要があります... LinuxとWindowsは異なるファイル区切り文字を使用するため、これは\または/よりも安全です。 File.separatorを使用すると、プログラムが実行されているプラ​​ットフォームに関係なくプログラムが実行されます。結局のところ、それがJVMのポイントです。 -スラッシュは機能しますが、File.separatorを使用すると、エンドユーザーはそれが機能することを確信できます。

そして、あなた エスケープする必要はありません"/ ...あなたは この質問への回答も参照してください

String fileP = "Test" + File.separator + "World";
11
J-Dizzle

Javaの文字をエスケープするには、たとえば「\」を使用します。

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

「/」のようなスラッシュをエスケープする必要はないと思います。

4
rozi

あなたの質問を言い換えさせてください。 zookeeperにノードを作成しようとしていますが、これは/ zookeeper/HelloWorld/NodeNameである必要があります。しかし、最後の部分「NodeName」は実際には「Test/World」であり、ノード名を「Test/World」にできるように、「/」をエスケープする方法を探しています。

Unicodeを試してみない限り、charをエスケープしても機能しないと思います。

/と同等の\ u002Fを試してください。

0

(zookeeperのノード名としてファイルシステムパスを使用して)まったく同じ問題を解決しようとしていますが、ノード名に「/」を含める方法が見つかりませんでした。

解決策は、「/」をノード名に表示できない文字に置き換えることです。 '/'または '\ 0'になるパスの場合、この場合は役に立ちません。

他の可能性は、「/」をノード名で許可されている文字列に置き換えることです。 「Test/World」->「Test%@ World」、「Test%World」->「Test %% World」を選択し、保存と読み込みにエスケープ/エスケープ解除を追加します。

もっと簡単な方法があれば、聞いてみたいです。

0
jka

Zookeeperについては何も知りません。しかし、"zookeeper", "HellowWorld", "Test/World"のような文字列のリストを保持しようとしているように見えます。次に、Zookeeperノードを作成するためにまたはを使用してファイルにパス名を作成します。システム。 (ファイルシステムを使用している場合は、サブディレクトリTestと、WorldサブディレクトリにファイルまたはサブディレクトリTestがあると想定しています。実際に名前の付いた単一のファイルまたはディレクトリを作成しようとしている場合Test/World、あきらめます。LinuxとWindowsの両方があなたと戦います。)

その場合は、「パス」をプログラムで渡す単純なStringとして表現しようとしないでください。代わりに、それをString[]またはArrayList<String>として表し、ファイルシステムパス名が必要な場合にのみファイルシステムパス名に変換します。または、getFilesystemPathメソッドを使用して独自のクラスを定義することをお勧めします。ノード名のリストをパス名Stringに変換するのが早すぎて、後でStringからリストを再構築しようとするのは、後で必要なデータを破棄するため(特に、どの情報を破棄するか)、不適切なアプローチです。 /文字は区切り文字であり、どの文字がノード名の一部であるか)。

編集: 別のコメントで述べたように、Zookeeperの単一のパス名も必要な場合は、Zookeeperを知らず、ドキュメントをざっと見て何も見つからないため、お手伝いできません。 Zookeeperのスラッシュをエスケープする方法がある場合でも、getFilesystemPathメソッドとgetZookeeperPathメソッドを使用して独自のクラスを定義することをお勧めします。2つのメソッドは特定の場合に異なるStringsを返す可能性があるためです。クラスは内部的に名前を配列またはArrayListとして保持します。

0
ajb