2012-04-15 14 views

cevap

20
Aklıma gelen kod

En kısa pasajı şudur: Ancak, ben inanıyorum aşağıdaki kod (kuşkusuz hantal) biraz peşinde olduğunuz (ve kendi Fayda fonksiyonunda bu sarabilirdiniz) Ne yapar : basit fonksiyonu yarattı

private String getParent(String resourcePath) { 
    int index = resourcePath.lastIndexOf('/'); 
    if (index > 0) { 
     return resourcePath.substring(0, index); 
    } 
    return "/"; 
} 

, benkodu esinlenerek:

İşte
URI uri = new URI("http://www.stackoverflow.com/path/to/something"); 

URI parent = uri.getPath().endsWith("/") ? uri.resolve("..") : uri.resolve(".") 
+1

URI.resolve aynı zamanda daha karmaşık işlemler için de harika ... uri.resolve ("dir/file.txt") – David

+0

Bu, "jar: file: ..." protokolüne sahip URI'ler için çalışmıyor gibi görünüyor. JAR dosyalarında bulunan kaynaklarla oluşur. –

3

Tek adımda bunu yapmak için kitaplık işlevini bilmiyorum.

import java.io.File; 
import java.net.MalformedURLException; 
import java.net.URL; 

public class URLTest 
{ 
    public static void main(String[] args) throws MalformedURLException 
    { 
     // make a test url 
     URL url = new URL("http://stackoverflow.com/questions/10159186/how-to-get-parent-url-in-java"); 

     // represent the path portion of the URL as a file 
     File file = new File(url.getPath()); 

     // get the parent of the file 
     String parentPath = file.getParent(); 

     // construct a new url with the parent path 
     URL parentUrl = new URL(url.getProtocol(), url.getHost(), url.getPort(), parentPath); 

     System.out.println("Child: " + url); 
     System.out.println("Parent: " + parentUrl); 
    } 
} 
+2

Windows'da bu, ters eğik çizgi oluşturur. – Sogartar

0

kullanımım durumda en iyi yaklaşım olduğunu çok basit bir çözümdür. Benim kodumda, Windows'ta ters eğik çizgi ile ilgili bir sorun yoktur. resourcePath'un protokol, alan ve bağlantı noktası numarası olmaksızın URL'nin kaynak kısmı olduğunu varsayalım. (ör. /articles/sport/atricle_nr_1234)

İlgili konular