1

最近、commons-vfsでファイルパスを解決するときに問題が発生しました。

  FileObject tmpDestFo = fsm.resolveFile("/tmp/tempfile%2flicense.xml");
  tmpDestFo.copyFrom(destFo);

例として、コピー後に期待するのは、「tempfile%2flicense.xml」という名前のファイルが「/tmp」ディレクトリの下に作成されることです。ただし、結果は「/ tmp/tempfile」ディレクトリに作成された「license.xml」という名前のファイルになります。

これは、文字'%2f'を'/'に置き換えるresolveFileAPIが原因だと思います。他の特殊文字が同じように処理されるかどうかはわかりません。

問題について何か考えがありますか?名前に「%2f」が含まれるファイルが必要です。

どうもありがとう。

4

1 に答える 1

0

resolveFile()には URI が必要ですが、実際にはかなりの数の文字をエスケープする必要があります。URL エンコードを介してファイル パスを実行するか、new File("/tmp/tempfile%2flicense.xml").toURI().toString()(少なくとも適切なファイル名の場合は) を使用できます。

あなたの場合、「/tmp/tempfile%252flicense.xml」に置き換える必要%があります%25

ところで: %2f はエンコードされた / です。そのように名前が付けられるはずですか?

于 2015-01-06T00:05:48.560 に答える