Java Относительный путь с URI - PullRequest
       8

Java Относительный путь с URI

0 голосов
/ 20 сентября 2018

Код ниже читает локальный файл.

final String filepath= "my/path/to/file.txt";

try (BufferedReader reader = Files.newBufferedReader(Paths.get(filepath))){
    System.out.println("First line : "+reader.readLine());
}

Однако я хочу точный эквивалент, но с использованием URI.Поэтому мой новый код выглядит следующим образом:

final String filepath= "file:///my/path/to/file.txt";

try (BufferedReader reader = Files.newBufferedReader(Paths.get(new URI(filepath)))){
    System.out.println("First line : "+reader.readLine());
}

И это хорошо работает, когда filepath является абсолютным путем.Но я хочу, чтобы это работало даже с относительным путем (как в первом коде).

Как я могу это сделать?

РЕДАКТИРОВАТЬ:

Я использую решениеиспользовать «нормальный» путь, когда мне нужен локальный относительный путь, и URI в других случаях (абсолютный путь или удаленный).

Итак, мой код такой:

final String filepath= "my/path/to/file.txt"; // or "file:///my/path/to/file.txt";
final URI uri = new URI(filepath);
final Path path;

if(uri.getScheme()!=null) {
    path = Paths.get(uri);
}else {
    path = Paths.get(filepath);
}

try (BufferedReader reader = Files.newBufferedReader(path)){
    System.out.println("First line : "+reader.readLine());
}

Это не совсемкрасиво, но работа сделана.Если есть лучшее решение, я все еще открыт для него.

1 Ответ

0 голосов
/ 20 сентября 2018

Вы можете использовать что-то вроде этого, которое является избыточным:

        URI uri = URI.create("file://" + Paths.get("my/path/to/file.txt").toAbsolutePath());

    try (BufferedReader reader = Files.newBufferedReader(Paths.get(uri))){
        System.out.println("First line : "+reader.readLine());
    }

Если вы можете, сообщите нам случай, когда вам нужен URI для указания на файл относительного пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...