public static void main(String[] args) {
// legacy code comes around with a File
File baseDir = new File("C:\\path\\to\\parent\\directory");
mkdirs(baseDir.toURI());
}
// method in a foreign module using URI
static void mkdirs(URI base) {
URI toCreate = base.resolve("folders/below");
System.out.println(toCreate);
}
Если каталог C:\path\to\parent\directory
действительно существует на моем жестком диске, он работает, как я ожидаю, и печатает:
file:/C:/path/to/parent/directory/folders/below
Однако, если нет, он печатает:
file:/C:/path/to/parent/folders/below
Это потому, что File.toURI()
создает URI с завершающим /
, обозначающим каталог, в случае, если File.isDirectory()
и способ URI.resolve()
.Во всяком случае, учитывая тот случай, когда я знаю, что baseDir
указывает каталог, но я не знаю, существует ли этот каталог или он должен быть создан с папками внизу.Каков рекомендуемый способ превратить baseDir
в URI с надежной косой чертой?
Изменение new File("C:\\path\\to\\parent\\directory")
на new File("C:\\path\\to\\parent\\directory\\")
(добавление косой черты здесь) ничего не меняет.
Я придумал это, но должен быть лучший способ сделать это:
public static void main(String[] args) {
File baseDir = new File("C:\\path\\to\\parent\\directory");
URI baseDirUri = baseDir.toURI();
String baseDirUriString = baseDirUri.toString();
if (!baseDirUriString.endsWith("/")) {
baseDirUri = URI.create(baseDirUriString.concat("/"));
}
mkdirs(baseDirUri);
}