java platform-independent

java - File.separator vs FileSystem.getSeparator() vs System.getProperty("file.separator")?



platform-independent (2)

Parece haber tres formas idénticas de obtener independientemente la plataforma de "separador de archivos" dependiente de la plataforma:

¿Cómo decidimos cuándo usar qué?

¿Hay alguna diferencia entre ellos?


Si su código no cruza los límites del sistema de archivos, es decir, solo está trabajando con un sistema de archivos, entonces use java.io.File.separator .

Esto, como se explicó, le proporcionará el separador predeterminado para su FS. Como explicó Bringer128, System.getProperty("file.separator") se puede sobrescribir a través de las opciones de línea de comandos y no es tan seguro como java.io.File.separator .

El último, java.nio.file.FileSystems.getDefault().getSeparator(); se introdujo en Java 7, por lo que también podría ignorarlo por ahora si desea que su código sea portátil en las versiones anteriores de Java.

Entonces, cada una de estas opciones es casi la misma que otras, pero no del todo. Elija uno que se adapte a sus necesidades.


System.getProperties() se puede invalidar mediante llamadas a System.setProperty(String key, String value) o con parámetros de línea de comandos -Dfile.separator=/

File.separator obtiene el separador para el sistema de archivos predeterminado.

FileSystems.getDefault() te proporciona el sistema de archivos predeterminado.

FileSystem.getSeparator() obtiene el carácter separador para el sistema de archivos. Tenga en cuenta que, como método de instancia, puede usar esto para pasar diferentes sistemas de archivos a su código que no sea el predeterminado, en los casos en que necesite que su código opere en múltiples sistemas de archivos en la única JVM.