Editar: reconozco que FileSystem.getDefault() me dará lo que estaba buscando en mi declaración de pregunta original. Estoy intentando usar FileSystem.getFileSystem (URI) para obtener el sistema de archivos para cualquier ruta determinada.
Estoy intentando desarrollar un código que me proporcione un objeto java.nio.file.FileSystem para una ruta determinada.
Aquí hay un código de ejemplo muy simplificado para dar una mejor idea de lo que se está intentando:
public FileSystem getCwdFilesystem() { URI cwdUri = null; String delimiter = ""; try { _cwd = System.getProperty("user.dir"); cwdUri = new URI("file", delimiter + _cwd, null); } catch (URISyntaxException ue) { System.out.println("URI Creation failure on URI: " + _cwd); ue.printStackTrace(); System.exit(1); } System.out.println("Filestore data for CWD: " + cwdUri.toString()); return (FileSystems.getFileSystem(cwdUri)); }Tras la ejecución, se lanza una excepción en la última línea de código:
Filestore data for CWD: file:/Users/redacted/Documents/Java%20Projects/ExampleCode Exception in thread "main" java.lang.IllegalArgumentException: Path component should be '/' at sun.nio.fs.UnixFileSystemProvider.checkUri(UnixFileSystemProvider.java:77) at sun.nio.fs.UnixFileSystemProvider.getFileSystem(UnixFileSystemProvider.java:92) at java.nio.file.FileSystems.getFileSystem(FileSystems.java:217) at examplecode.FilesystemCapacity.getCwdFilesystem(FilesystemCapacity.java:54) at examplecode.FilesystemCapacity.main(FilesystemCapacity.java:33) Java Result: 1Cuando realizo una pequeña actualización de la variable delimitadora:
String delimiter = "/";Recibo un mensaje de error diferente arrojado desde el mismo lugar:
Filestore data for CWD: file://Users/redacted/Documents/Java%20Projects/ExampleCode Exception in thread "main" java.lang.IllegalArgumentException: Authority component present at sun.nio.fs.UnixFileSystemProvider.checkUri(UnixFileSystemProvider.java:73) at sun.nio.fs.UnixFileSystemProvider.getFileSystem(UnixFileSystemProvider.java:92) at java.nio.file.FileSystems.getFileSystem(FileSystems.java:217) at examplecode.FilesystemCapacity.getCwdFilesystem(FilesystemCapacity.java:54) at examplecode.FilesystemCapacity.main(FilesystemCapacity.java:33) Java Result: 1Agregar caracteres "/" adicionales al delimitador simplemente hace que vuelva a aparecer el primer mensaje de error.
¿Qué estoy haciendo mal?
Encontré una referencia que había pasado por alto anteriormente en la última página del rastro del documento NIO.2.
Escribí un código de prueba que me dio exactamente lo que necesitaba:
public void getPathFilesystem(String path) { try { URI rootURI = new URI("file:///"); Path rootPath = Paths.get(rootURI); Path dirPath = rootPath.resolve(path); FileStore dirFileStore = Files.getFileStore(dirPath); printFileStore(dirFileStore, path); } catch (IOException | URISyntaxException e) { e.printStackTrace(); } } public void printFileStore(FileStore filestore, String path) { try { System.out.println("Name: " + filestore.name()); System.out.println("\tPath: " + path); System.out.println("\tSize: " + filestore.getTotalSpace()); System.out.println("\tUnallocated: " + filestore.getUnallocatedSpace()); System.out.println("\tUsable: " + filestore.getUsableSpace()); System.out.println("\tType: " + filestore.type()); } catch (IOException ioe) { ioe.printStackTrace(); } }