システム プロパティ「java.security.policy」をプログラムで設定しようとしています。
セキュリティ ポリシー ファイルへのパスにスペースが含まれていない限り、機能します。
File myFileReference = new File("C:\folder_name\security.policy")
System.setProperty("java.security.policy", myFileReference.getAbsolutePath());
System.setSecurityManager(new RMISecurityManager());
ファイル パスにスペースがある場合、「C:\folder%20name\security.policy」のように %20 でエスケープされます。
上記のコードは正常に実行されますが、すべてのセキュリティ チェックが失敗します。setProperty は実際にはファイルを見つけられないと思います。
Windows では、スペースをエスケープせずにファイル名を書き込めます。
System.setProperty("java.security.policy", "C:\\some folder\\wideopen.policy");
したがって、問題は %20 space escaping にあるようです。正規表現を使用して置き換えることもできますが、Windows でのみ機能し、他の場所で失敗する可能性があります。また、そのようなファイルパスをハードコードしたくありません。
どのプラットフォームでも機能する「System.setProperty」と互換性のあるパス名を返す File 関数の Java ドキュメントを調べました。toURI().toString() のようなことも試しましたが、役に立ちませんでした。
1行のコードでファイル参照から作業ファイルパス文字列を取得するエレガントな方法はありますか?
編集:これは単純化されたコードでした。私はこのようにファイルを作成します
URL policyURL = Class.class.getResource("/sub local folder/wideopen.policy");
new File(policyURL.getFile())
相対パスが必要だったので、ちょっとした getResource トリックを使用しました。これはたまたま URL を返し、厄介な %20 エスケープが含まれていました。問題が何であるかがわかったので、URLDecoder を使用してそれらを取り除くことができます。しかし、エラーが発生しにくい方法はありますか?