Есть ли простой и понятный способ сделать строки пути к файлам в Java OS независимыми? - PullRequest
0 голосов
/ 08 февраля 2019

Я создал класс, который принимает любую строку одного формата (например, UNIX) и распространяется на любую ОС, на которой работает Java.

enum OperatingSystem {
    WINDOWS,
    LINUX;

    static OperatingSystem initOS() {
        String osName = System.getProperty("os.name");

        switch (osName) {
            case "Windows 8.1":
               return WINDOWS;
            case "Linux":
               return LINUX;
            default:
                return LINUX;
        }
    }

}



public class OSSP {
    public static final OperatingSystem USEROS = OperatingSystem.initOS();


//    Auxilarry methods to return OSAppropriateString
    private static String makeLinuxCompatible(String[] path) {
        return String.join("/", path);
    }

    private static String makeWindowsCompatible(String[] path) {
        return String.join("\\", path);
    }

    public static String getOSSpecificPath(String path) {
        String[] splittedPath = {""}, subpath = {""};
        String finalPath = "";
        if(path.contains("\\")) {
            splittedPath = path.split("\\\\",-1);
        }
        else if (path.contains("/")) {
            splittedPath = path.split("/",-1);
        }

        if (USEROS == OperatingSystem.LINUX) {
            finalPath =  makeLinuxCompatible(splittedPath);
        }
        else if (USEROS == OperatingSystem.WINDOWS) {
            finalPath =  makeWindowsCompatible(splittedPath);
        }
        return finalPath;
    }
}

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

Но у меня есть огромный код GUI, куда я должен был бы вставить эту функцию, где бы ни указывался путь в программе.Есть ли способ сделать путь, подобный строкам, автоматически зависящим от ОС?

В противном случае параметр, при котором любая функция ОС, которая принимает путь, автоматически изменяется соответствующим образом.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Использование Путь с Файлы .

Path path = Paths.get(".../...");
Path path = Paths.get("...", "...");
// path.resolve, relativize, normalize, getFileSystem

Этот класс является обобщением File, которое предназначено только для файлов чистой файловой системы.Путь может указывать в подкаталоге .zip с использованием файловой системы zip и т. Д.

Для установленного Файла с использованием API можно использовать Path.toFile() и File.toPath().

Paths.get очень универсален, в том числе благодаря совместимости Posix с Windows (допускает / помимо \).Вы можете получить канонический нормализованный путь в любом случае.

path.toRealPath()

Старый File, который вы можете использовать:

String separator = File.separator;

Для пути, который может указывать на различные файловые системы :

String separator = path.getFileSystem().getSeparator();

В общем Path - это отличный класс, хранящий названия частей, файловую систему.Он охватывает много аспектов, таких как "..".

0 голосов
/ 08 февраля 2019

Лучший способ справиться с подобной ситуацией - не пытаться обнаружить ОС, так как это может быть случайным попаданием.Вместо этого Java API предоставляет способ сказать вам, какой символ использовать в качестве разделителя пути.Посмотрите на эту документацию API для File: https://docs.oracle.com/javase/8/docs/api/java/io/File.html и найдите определенное статическое поле separator.Я настоятельно рекомендую вам разобрать путь, используя класс File, тогда, если вам нужен путь в виде строки, просто вызовите toURI().toString(), чтобы получить его в формате, который может распознавать ОС.

...