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