![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
URI uri1 = URI("./a1/a2/a3");(もしくはURI("C:/a1/a2/a3"))
と
URI uri2 = URI("./b1/b2/b3");(もしくはURI("C:/b1/b2/b3"))
という2つのURIがあって、
uri1からuri2への相対パス
../../../b1/b2/b3
を求めたいのですが、
Javaの標準ライブラリか何かで、
このアルゴリズムはサポートされていないでしょうか。
ちなみに、目をつけてみた
uri1.relativize(uri2)
では、
./b1/b2/b3
の結果になってしまいます。
自前で作成したものにバグが見つかったので、
できれば広く使われているモジュールを使用したいのです。
No.1ベストアンサー
- 回答日時:
例によって未解決。
中間報告のみ。>Javaの標準ライブラリか何かで、
このアルゴリズムはサポートされていないでしょうか。
一応ドキュメントにはそれらしき箇所があるのだけれど,
http://java.sun.com/javase/6/docs/api/java/net/U …
>if the path of this URI is not a prefix of the path of the given URI, then the given URI is returned.
url2がurl1のディレクトリの子孫にあたる時
public class Q3641263A{
public static void main(String[] args){
try{
java.net.URI uri1 = new java.net.URI("./a1/a2/a3/");
java.net.URI uri2 = new java.net.URI("./a1/a2/a3/a5");
System.out.println(uri1.isOpaque());
System.out.println(uri2.isOpaque());
System.out.println(uri1.relativize(uri2));
}catch(java.net.URISyntaxException e){
System.out.println(e.getStackTrace());
}
}
は,希望通り(正常に、とか正しく、とか言わないw)
a5が返る
http://bugs.sun.com/view_bug.do?bug_id=6226081
も少し気になっている。
#このバグに投稿されているコード,少なくとも一方が絶対URIなので
isOpaqueでメソッドの引数のURIがそのまま返ったりしないのだろうか・・・
=====
余談つーかブログから
同じようなものをC#で書くと・・・
[C#]
namespace P20080101B
{
class P20080101B
{
public static void Main(string[] args)
{
System.Uri address1 = new System.Uri("http://a1/a2/a3/");
System.Uri address2 = new System.Uri("http://a1/b2/b3/");
System.Console.WriteLine("The difference is {0}", address1.MakeRelativeUri(address2));
}
}
}
結果:
The difference is ../../b2/b3/
namespace P20080101C
{
class P20080101C
{
public static void Main(string[] args)
{
System.Uri address1 = new System.Uri("http://a1/a2/a3/");
System.Uri address2 = new System.Uri("http://a1/a2/a3/b1/");
System.Console.WriteLine("The difference is {0}", address1.MakeRelativeUri(address2));
}
}
}
結果:
The difference is b1/
と,どちらでも可能だ。
ただし,コンストラクタにRelativeURIを指定できそうになく。
====================
回避策・他ライブラリは現在の所発見できていません。
===========
>自前で作成したものにバグが見つかったので、
後学のためソースの提出とバグの解説が読みたいな
うーん、Javadocの英語読んでみて、さっぱりわからなかったので、日本語のJavadoc読んでみたのですが、あまりわからず。。
英語の読解力の低さもさることながら、専門用語の語彙もかなり低いみたいです。。
himajin10万さんは調べるのうまいですねー。
日本語では検索ワードとか思いつくんですけど、英語だとなんて検索していいかわからなくて・・。
最近やっと英語の技術書1冊読んだ程度の英語力なので、とりあえずあてずっぽ読みはできても検索のための文つくるとか流し読みでリンク辿るといったことがまだできない状況で。
そのようなライブラリが他に用意されていないのは以外でした。
どこかにベンダーがあってもおかしくないと思っていただけに。
自作したものは、URIではなく、Fileを扱うものです。
ライブラリを探す時間が惜しいという理由から作成したものなので、機能はとりあえずのものしかありませんが・・。
バグは、ありませんでした。
結局、呼び出したソースのほうに問題があったみたいです。
自作モジュールだと、テストをきちんとしていないため、すぐにバグを疑ってしまいます・・。
そういう点からも、よくテストされたモジュールほしいですよね。。
ソース提出の件等も含めて、また遊びにいきます。
いつもありがとうございます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Safari(サファリ) safariに限らずかも知れませんが、URLをタッチして一部分だけ消したりしたいのですが、URIをタ 2 2022/06/28 17:56
- オープンソース Coinmarketcap api 1 2022/05/30 15:47
- その他(パソコン・周辺機器) チャレンジタッチ3 改造 アプリインストールできない 1 2022/07/01 14:43
- ハッキング・フィッシング詐欺 Airbnb セルフチェックの宿の個人確認について 1 2022/05/08 10:12
- Excel(エクセル) EXCEL 行内のデータを2行に分けて、表を作り直したいのです。教えてください。 5 2023/06/25 14:00
- Excel(エクセル) Google Spreadsheetのカスタム表示形式について 2 2023/05/20 09:10
- 統計学 個別の期待値は小さいけど集計すると期待値は大きくなる場合とは? 4 2022/06/14 08:27
- Excel(エクセル) スプレッドシートについて A1÷B1の値をC1に、A2÷B2をC2、A3÷B3をC3…といった感じで 1 2022/05/17 20:24
- 数学 高校物理 相対速度の式について 5 2022/05/11 00:14
- Excel(エクセル) セルの計算の上限値を設定し、残りを別のセルに表示させる 7 2022/06/17 13:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
中カッコ{}だけの記述について
-
変数を動的に利用するには?
-
インタフェイス実装と抽象クラ...
-
Javaでlog4jを使ってログ出力を...
-
Socketの接続のタイムアウトを...
-
javaに関する質問です
-
javaのプログラミングで作るRPG...
-
プログラミングの問題です。大...
-
URIからURIへの相対URIの求め方
-
eclipseのコンソール
-
JavaのEnum型について
-
リフレクション Method.invoke(...
-
C言語のポインターに関する警告
-
ループ処理の際、最後だけ","を...
-
[JAVA]try 内の変数を外で!?
-
JSPやサーブレットでSystem.out...
-
ダブルクォーテーションのrepla...
-
C言語32bitから64bitの移行につ...
-
javaで質問です。 文字列2023/2...
-
VBAで配列の計算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数を動的に利用するには?
-
プログラミングの問題です。大...
-
中カッコ{}だけの記述について
-
Javaでlog4jを使ってログ出力を...
-
NoSuchMethodErrorが解決できま...
-
Socketの接続のタイムアウトを...
-
コンストラクタの引数の中のnew?
-
javaのプログラミングで作るRPG...
-
System.exit()の値を取得したい
-
JSP/Servletのパラメータの受け...
-
Processing :指定フォルダ内の...
-
javaで特定の文字列から特定の...
-
インタフェイス実装と抽象クラ...
-
Javaで日本語の出力が文字化けする
-
randomで
-
StringクラスのcompareToメソッド
-
【初心者です】javaで平均値を...
-
DESを使用した暗号化/復号化処...
-
初心者なので教えてほしいです。
-
ArrayList でスタックを
おすすめ情報