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