¿Hay una manera limpia y fácil de hacer cadenas de ruta de archivos en Java OS agnóstico?

Tarun Maganti:

He hecho una clase que tiene en cualquier cadena de un formato (por ejemplo. UNIX) y coberteras en cualquier sistema operativo Java se está ejecutando.

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;
    }
}

Esto está bien si usted está trabajando en pequeño código y usted tendría que hacerlo a menudo.

Sin embargo, tengo una enorme código de interfaz gráfica de usuario, donde tendría que insertar esta función siempre que haya ruta especificada en el programa. ¿Hay una manera de hacer camino como cuerdas automáticamente específico del sistema operativo?

De lo contrario un entorno en el que cualquier función OS que tiene una trayectoria cambia automáticamente en consecuencia bajo el capó.

Joop Eggen:

Use Path con archivos .

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

Esta clase es una generalización de Fileque es sólo para los archivos del sistema de archivos puros. Un camino podría apuntar en un subdirectorio de un .zip utilizando un sistema de archivos zip y así sucesivamente.

Por Archivo establecida utilizando las API se puede utilizar Path.toFile()y File.toPath().

Paths.getEs muy versátil, también debido a la compatibilidad POSIX de Windows (aceptando /, además \). Usted puede obtener una ruta normalizada canónica de todos modos.

path.toRealPath()

El viejo Filese puede utilizar:

String separator = File.separator;

Por un camino que puede apuntar a diferentes sistemas de archivos :

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

En general Path es una clase ingenioso almacenar las partes del nombre, el sistema de archivos. Cubre muchos aspectos como "..".

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=202405&siteId=1
Recomendado
Clasificación