Преобразование файла в каталог, из которого неясно, существует ли он в URI с надежной конечной косой чертой - PullRequest
1 голос
/ 23 апреля 2019
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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...