Существует ли стандартный способ преобразования строки в файл с учетом возможности ввода строки в формате URL / URI - PullRequest
2 голосов
/ 13 января 2020

Я хотел бы получить наиболее точное File типизированное представление String, которое должно ссылаться на локальный (существующий) файл в одной из нескольких форм, таких как:

String file0 = "/home/my_user/file.txt"

String file1 = "file:///home/my_user/file.txt"

String file2 = "file.txt"; // assuming that the working dir is /home/my_user.

Есть ли (квази) одиночный лайнер, использующий стандартную библиотеку или, возможно, обычную стороннюю компанию, такую ​​как apache - общие, которые добьются цели?

Спасибо.

Ответы [ 2 ]

1 голос
/ 14 января 2020

Вы можете определить свою собственную функцию для этой цели. Ниже приведены определение функции и тестовый код:

import java.io.File;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;

public class Main {
    public static void main(String[] args) {
        String file0 = "/Users/arvind.avinash/file.txt";
        String file1 = "file:///Users/arvind.avinash/file.txt";
        String file2 = "file.txt"; // assuming that the working dir is /Users/arvind.avinash.

        System.out.println(getFile(file0).exists());
        System.out.println(getFile(file1).exists());
        System.out.println(getFile(file2).exists());
    }

    static File getFile(String pathOrUri) {
        URI uri;
        File file = null;
        try {
            uri = new URL(pathOrUri).toURI();
        } catch (MalformedURLException e) {
            return new File(pathOrUri);
        } catch (URISyntaxException e) {
            return new File(pathOrUri);
        }
        if (uri != null) {
            file = new File(uri);
        }
        return file;
    }
}

Вывод:

true
true
true

[Обновить]

Ниже приведена более упрощенная версия:

import java.io.File;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;

public class Main {
    public static void main(String[] args) {
        String file0 = "/Users/arvind.avinash/file.txt";
        String file1 = "file:///Users/arvind.avinash/file.txt";
        String file2 = "file.txt"; // assuming that the working dir is /Users/arvind.avinash.

        System.out.println(getFile(file0).exists());
        System.out.println(getFile(file1).exists());
        System.out.println(getFile(file2).exists());
    }

    static File getFile(String pathOrUri) {
        URI uri;
        try {
            uri = new URL(pathOrUri).toURI();
        } catch (MalformedURLException | URISyntaxException e) {
            return new File(pathOrUri);
        }
        return new File(uri);
    }
}
0 голосов
/ 13 января 2020

Вы можете вызвать new File(x) в примерах 1 и 3. Это должно сработать.

Что касается # 2, вы можете создать URI, а затем создать File из этого. На самом деле я думаю, что все они, вероятно, будут работать с использованием URI

String fileStr = "file:///home/my_user/file.txt";
try {
  URI uri = new URI(fileStr);
  File f = new File(uri);
} catch (URISyntaxException ex) { ...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...