Есть необходимость сохранять путь к некоторуму файлу и нужно чтобы можно было обращаться к нему можно было из под разных OS.
File.getAbsolutePath();
File.getCanonicalPath();
возвращают платформенно зависимый путь( разделенный File.separator);
то есть если сохранить путь под Windows( к примеру "<каталог>\параметры\Почта.xml") то по Linux уже не откроешь.
Пока есть вариант заменять \ на / что должно работать на всех платформах.
Может есть более красивый вариант
абсолютный путь по любому будет разный. пиши относительный(относительно user path или там wd) в юникс стиле — под виндой тоже работать будет.
пример "./config.ini"
T>Пока есть вариант заменять \ на / что должно работать на всех платформах.
вообще есть такая константа File.separator
Здравствуйте, dotidot, Вы писали:
D>абсолютный путь по любому будет разный. пиши относительный(относительно user path или там wd) в юникс стиле — под виндой тоже работать будет. D>пример "./config.ini"
Да и так пишу относительно.дело в том что если пользователь выбрал файл в JFileChooser то вернется File и путь имеет с разделением File.separator.
т.е. необходимо дополнительно заменить File.separator на /
Здравствуйте, dotidot, Вы писали:
D>вообще есть такая константа File.separator
Есть и константа separatorChar, а separator просто приводит ее к String.
Здравствуйте, techmax, Вы писали:
T>Есть необходимость сохранять путь к некоторуму файлу и нужно чтобы можно было обращаться к нему можно было из под разных OS. T> File.getAbsolutePath(); T> File.getCanonicalPath(); T>возвращают платформенно зависимый путь( разделенный File.separator); T>то есть если сохранить путь под Windows( к примеру "<каталог>\параметры\Почта.xml") то по Linux уже не откроешь. T>Пока есть вариант заменять \ на / что должно работать на всех платформах. T>Может есть более красивый вариант
Если путь нужен только для работы из Java программы, то есть пользователю не нужно видеть этот путь, то может просто сериализовать нужный объект File?
Здравствуйте, techmax, Вы писали:
D>>абсолютный путь по любому будет разный. пиши относительный(относительно user path или там wd) в юникс стиле — под виндой тоже работать будет. D>>пример "./config.ini"
T>Да и так пишу относительно.дело в том что если пользователь выбрал файл в JFileChooser то вернется File и путь имеет с разделением File.separator. T>т.е. необходимо дополнительно заменить File.separator на /
Я как то не понимаю одну вещь. Пользователь выбирает локальный путь на локальной машине на которой стоит вполне определенная OC. Каким образом этот путь может что либо значить на другой машине? Там же не только ОС отличаются но и содержимое файловой системы тоже?
Здравствуйте, GarryIV, Вы писали:
GIV>Я как то не понимаю одну вещь. Пользователь выбирает локальный путь на локальной машине на которой стоит вполне определенная OC. Каким образом этот путь может что либо значить на другой машине? Там же не только ОС отличаются но и содержимое файловой системы тоже?
Видимо, предполагается, что содержимое ФС в какой-то мере, необходимой для работы программы, совпадает. Хотя интересно было бы узнать изначальную задачу.
GIV>А так у File есть метод toURL()
Тогда уж toURI().toUrl(), потому как toURL() depricated в классе File
D>Видимо, предполагается, что содержимое ФС в какой-то мере, необходимой для работы программы, совпадает. Хотя интересно было бы узнать изначальную задачу.
Задача такая есть некоторая файлопомойка. Пользователь может поместить туда свой файл и сохраняет к нему путь, относительно какого-нибудь каталога( например (<путь>/files/myfiles/MyDocumet.odt , где "путь" — каждый свой для каждого пользователя). Т.е. при сохранении заменям на "путь", при обращении просто подставляем этот реальное значение.
GIV>>А так у File есть метод toURL() D>Тогда уж toURI().toUrl(), потому как toURL() depricated в классе File
В документации написано что эти методы system-dependent, хотя слеши такие какие нужны.
Надо погонять
D>>Видимо, предполагается, что содержимое ФС в какой-то мере, необходимой для работы программы, совпадает. Хотя интересно было бы узнать изначальную задачу. T>Задача такая есть некоторая файлопомойка. Пользователь может поместить туда свой файл и сохраняет к нему путь, относительно какого-нибудь каталога( например (<путь>/files/myfiles/MyDocumet.odt , где "путь" — каждый свой для каждого пользователя). Т.е. при сохранении заменям на "путь", при обращении просто подставляем этот реальное значение.
Что то а-ля DC++? Тогда зачем все эти заморочки с "путем файла". Есть путь, идентифицирующий файл на локальной машине, и есть некий URL идентифицирующий файл в вашей помойке. Пишешь преобразование туда и обратно и вуаля.
Здравствуйте, GarryIV, Вы писали:
GIV>>>А так у File есть метод toURL() D>>Тогда уж toURI().toUrl(), потому как toURL() depricated в классе File
GIV>Это он в Java 6 стал deprecated?
Видимо, да. Про 1.5 сказать не могу.
[quote]Deprecated. This method does not automatically escape characters that are illegal in URLs. It is recommended that new code convert an abstract pathname into a URL by first converting it into a URI, via the toURI method, and then converting the URI into a URL via the URI.toURL method.[/quote]
Здравствуйте, Donz, Вы писали:
GIV>>>>А так у File есть метод toURL() D>>>Тогда уж toURI().toUrl(), потому как toURL() depricated в классе File
GIV>>Это он в Java 6 стал deprecated? D>Видимо, да. Про 1.5 сказать не могу.
В 1.5 еще нет...
D>[quote]Deprecated. This method does not automatically escape characters that are illegal in URLs. It is recommended that new code convert an abstract pathname into a URL by first converting it into a URI, via the toURI method, and then converting the URI into a URL via the URI.toURL method.[/quote]
Ок. Сенькс. Буду иметь ввиду.
Наверно уже пора посмотреть вплотную на шестерку...