Lukasi, problem asi bude v tomhle radku:
URI rootPath = File.listRoots()[*1*].toURI();
Zkus toto:
public static void main(String[] args) {
String myAbsolutePathString = System.getProperty("user.home") +
"/tmp/test.txt";
File myFile = new File(myAbsolutePathString);
URI myPath = myFile.toURI();
for (File rootFile : File.listRoots()) {
URI rootPath = rootFile.toURI(); // "C:" is the second FS root
on my Windows
URI relativePath = rootPath.relativize(myPath);
System.out.println(rootFile + ": " + relativePath.toString());
}
}
L.
2008/10/31 Lukáš Zapletal <[EMAIL PROTECTED]>
> Zdravim,
>
> stale to ale neni to, co potrebuji. Vypadne z toho totiz vzdy
> file://cesta a ja potrebuji jen to "cesta". A o tom to cele (tahle
> diskuse) je. Z instance objektu File nedostanu zadnymi rozumnymi
> prostredky cestu jako "cesta" (pouze jako file://cesta, coz ukazuje i
> Vas kod). Musim totiz pracovat s API, ktera vyzaduje zadani cesty k
> souboru v tomto tvaru (neakceptuje ani file://cesta ani
> cesta\s\obracenymi\lomitky).
>
> Situaci povazuji za vyresenou tim, ze se zde objevilo nekolik navrhu,
> jak cestu "rucne" prevest (na Windows odstranit obracena lomitka). Kod
> je nekde v tomto mega-threadu.
>
> LZ
>
> 2008/10/30 Potociar Marek <[EMAIL PROTECTED]>:
> > Mate pravdu - ten povodny kod robi problemy. Tu je upraveny kod, ktory
> som
> > otestoval na Windows aj na MacOS:
> >
> > package uritestapp;
> >
> > import java.io.File;
> > import java.io.IOException;
> > import java.net.URI;
> > import java.net.URISyntaxException;
> >
> > /**
> > *
> > * @author Marek Potociar (marek.potociar at sun.com)
> > */
> > public class Main {
> > public static void main(String[] args) throws IOException,
> > URISyntaxException {
> >
> > String myAbsolutePathString = System.getProperty("user.home") +
> > "/tmp/test.txt";
> >
> > File myFile = new File(myAbsolutePathString);
> > URI myPath = myFile.toURI();
> >
> > URI rootPath = File.listRoots()[1].toURI(); // "C:" is the second
> FS
> > root on my Windows
> > URI relativePath = rootPath.relativize(myPath);
> > System.out.println(relativePath.toString());
> > }
> > }
> >
> > Jediny problem spociva v najdeni spravneho FS rootu. Na mojom laptope mam
> > pod MacOS hlavny FS root namountovany ako prvy ( File.listRoots()[0] ),
> pod
> > Windows mam "C:" namountovany ako druhy v poradi ( File.listRoots()[1] ).
> >
> > ...ale ak tvrdite, ze ste uz nasli lepsi sposob, ktory bude vo
> vseobecnosti
> > fungovat, tak tuto diskusiu samozrejme nema zmysel predlzovat.
> >
> > S pozdravom,
> > Marek Potočiar
> >
> >
> > On 29.10.2008, at 13:05, Lukáš Zapletal wrote:
> >
> >>> String myAbsolutePathString = System.getProperty("user.home") +
> >>> "/tmp/test.txt"; // premenna ktoru chceme relativizovat
> >>>
> >>> File myFile = new File(myAbsolutePathString);
> >>> URI myPath = new URI(myFile.getCanonicalPath());
> >>>
> >>> URI rootPath = new URI(File.listRoots()[0].getCanonicalPath()); //
> >>> pri ziskavani rootu treba vo vseobecnosti pocitat s tym, ze FS rootov
> >>> moze
> >>> byt viac...
> >>> URI relativePath = rootPath.relativize(myPath);
> >>>
> >>> System.out.println(relativePath.toString()); // kontrolny vypis
> >>
> >> Tento kod nemuze na Windows fungovat, protoze konstruktur URI(String)
> >> ocekava obycejna lomitka, tak, jak to definuje specifikace URI-path.
> >> Volani myFile.getCanonicalPath() ovsem vraci na Windows ta opacna
> >> lomitka, cimz dostaneme URISyntaxException.
> >>
> >> Ciste hypoteticky, kdyby kod fungoval (napriklad na UNIXu), to neni
> >> to, co jsem potreboval, protoze volani URI.toString() vraci
> >> "file:/...." a to ja nechci.
> >>
> >> Diky za komentar, ja bych toto tema uz uzavrel. Vysledku jsme se v
> >> tomto dlouhem threadu dopidili.
> >>
> >> --
> >> Lukas Zapletal
> >> http://lukas.zapletalovi.com
> >
> >
>
>
>
> --
> Lukas Zapletal
> http://lukas.zapletalovi.com
>