Relativen Pfad ermitteln

  • Antworten:1
Andreas Engel
  • Forum-Beiträge: 14

22.05.2011, 19:26:57 via Website

Hallo,

ich muss aus 2 Pfaden den relativen Pfad ermitteln

Zum Beispiel:

Pfad 1: /mnt/sdcard/cachebox/User/Tracks
Pfad 2: /mnt/sdcard/cachebox/User/Media/Dateiname

Der relative Verzeichnispfad müßte lauten:

"../Media/Dateiname"

In C# habe ich das so gelöst:
1public static String GetMediaPath() // Ermittelt den Media-Path relativ zum Track-Pfad
2 {
3 Uri toUri = new Uri(Pfad2));
4 Uri fromUri = new Uri(Pfad1);
5 Uri relativUri = fromUri.MakeRelativeUri(toUri);
6 String relativPath = "..\\" + relativUri.ToString() + '\\';
7 return relativPath;
8 }

Aber wie macht man das in Java?

Danke
Andreas

Antworten
Markus B.
  • Forum-Beiträge: 636

23.05.2011, 10:56:59 via Website

Hi,
also ich kenne keine Lib in Java, welche c# Funktionalität portiert. Evtl. kann ja noch wer was ...
Mir fällt nichts ein als die Geschichte selbst zu schreiben. Als Einstieg evtl. folgendes:
1public class Test
2{
3 public static void main(final String[] args)
4 {
5 final String uri1 = "http://www.google.de/";
6 final String uri2 = "http://www.google.de/cachebox/User/Media/Dateiname";
7
8 System.out.println(makeRelativeUri(uri2, uri1));
9 }
10
11 private static String makeRelativeUri(final String fromUrl, final String toUrl)
12 {
13 if(null == fromUrl || null == toUrl)
14 {
15 throw new IllegalStateException("Parameter dürfen nicht null sein.");
16 }
17
18 if(fromUrl.length() > toUrl.length())
19 {
20 if(fromUrl.startsWith(toUrl))
21 {
22 return "../";
23 }
24 }
25 else
26 {
27 int lastIndexOfSlash = -1;
28 for(int i=0;i<fromUrl.length();i++)
29 {
30 if('/' == fromUrl.charAt(i))
31 {
32 lastIndexOfSlash = i;
33 }
34
35 if(fromUrl.charAt(i) != toUrl.charAt(i) || (fromUrl.length()-1) == i)
36 {
37 return toUrl.substring(lastIndexOfSlash+1, toUrl.length());
38 }
39
40 }
41 }
42 return null;
43 }
44}

Gruß,
Markus

— geändert am 23.05.2011, 11:29:15

Antworten