2016-10-03 31 views
0

私は、ヘッドラインに記載されているように、Tomcat-ContextファイルにあるStringとして私に与えられたパスからファイルを読み込もうとしています。Pathから///で始まりコロンを含むテキストファイルを読み込む

パスは "/// C:"で始まります。 Unixシステムでは、 "/ C:"で始まります。

MyPath = Paths.get("///C:" + filename); 
byte[] encoded = Files.readAllBytes(MyPath); 
String JsonString = new String(encoded); 

これは、このエラーにつながる:今、私は次のようにやろうとしていますのよう 「不正な文字[:]をインデックス4でのパスに:///C:/file.json」

WindowsはそのパスにColonsのようなものはありませんが、パスから先頭のSubstirng "///"を切り捨てると、ウィンドウで処理できます。 (しかし、それは本当に助けにはならない、これは壊れやすいし、コーディングの本当の悪い方法なので)。

私はかなりshureです、これは私がパスを理解していないことです-命名規則。 このようなパスをどのように扱うべきですか?

挨拶: ユンゲ

+0

また、誰もがC:を使用しているわけではないことに注意してください。 –

+0

先頭の "/// C:/"は実際には静的な文字列ではありません。私はちょうど質問のために1つに置き換えたので、読みやすい。 これは実際にはサーバーのコンテキストによって設定されます。しかし、助けてくれてありがとう。 – Junge

答えて

1

私の間違いだったことは本当だストリング()が必要な場合私が受け取ったURLをURLとして扱わなかったということです。

MyPath = Paths.get(new URL("///C:" + filename).toURI());

それは両方のシステムで動作します: 次のコードスニペットは、トリックを行いました。私はPaths.get()がURL内の "///"を理解していると思います。

0

私の提案は、(定数はIMOより効率的に、しかし、あなたのプログラムに依存するように))あなたははSystem.getProperty(と最初にしているOSを確認するには、次のようになります。

private static final boolean Windows = System.getProperty("os.name").contains("indow"); 

あなたは他(のLinux/OS X)用のWindowsとfalseである場合、それは本当だろう

あなたは、あなたがWindows上であなたは、ファイルのパスを渡した瞬間かどうかを確認する必要があります。 (:「C:」渡す代わりに「/// C:」のなど)は、そうでなければ、他のOSのためであるとして、それを与える:

MyPath = Paths.get((Window ? drive.substring(3) : drive) + filename); 
+0

ねえ、ありがとう。 これはうまくいくかもしれませんが、私が最近知ったのは、URLを取得した場合は、単純なStringとしてではなく1として扱うべきだということです。 'MyPath = Paths.get(新しいURL(" /// C: "+ファイル名).toURI()); ' これは両方のシステムで機能します。 – Junge

+0

私に知らせてくれてありがとう!あなたは答えとしてそれを置くことができますbtw。 – fab

関連する問題