puedo permite lista guarda excepciones configurar como bloquea agregar actualizar java windows url

permite - url to file java



Conversión de Java file:// URL a File(…) ruta, plataforma independiente, incluidas rutas UNC (4)

Basado en la sugerencia y el enlace provistos en la respuesta de Simone Giannis, este es mi truco para solucionar esto.

Estoy probando en uri.getAuthority (), porque la ruta UNC informará una Autoridad. Este es un error, por lo que confío en la existencia de un error, que es malo, pero parece que se mantendrá para siempre (ya que Java 7 resuelve el problema en java.nio.Paths).

Nota: En mi contexto recibiré rutas absolutas. He probado esto en Windows y OS X.

(Sigo buscando una mejor manera de hacerlo)

package com.christianfries.test; import java.io.File; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; public class UNCPathTest { public static void main(String[] args) throws MalformedURLException, URISyntaxException { UNCPathTest upt = new UNCPathTest(); upt.testURL("file://server/dir/file.txt"); // Windows UNC Path upt.testURL("file:///Z:/dir/file.txt"); // Windows drive letter path upt.testURL("file:///dir/file.txt"); // Unix (absolute) path } private void testURL(String urlString) throws MalformedURLException, URISyntaxException { URL url = new URL(urlString); System.out.println("URL is: " + url.toString()); URI uri = url.toURI(); System.out.println("URI is: " + uri.toString()); if(uri.getAuthority() != null && uri.getAuthority().length() > 0) { // Hack for UNC Path uri = (new URL("file://" + urlString.substring("file:".length()))).toURI(); } File file = new File(uri); System.out.println("File is: " + file.toString()); String parent = file.getParent(); System.out.println("Parent is: " + parent); System.out.println("____________________________________________________________"); } }

Estoy desarrollando una aplicación independiente de plataforma. Estoy recibiendo una URL de archivo *. En las ventanas estos son:

  • file:///Z:/folder%20to%20file/file.txt

  • file://host/folder%20to%20file/file.txt (una ruta UNC)

Estoy usando un new File(URI(urlOfDocument).getPath()) que funciona bien con el primero y también en Unix, Linux, OS X, pero no funciona con las rutas UNC.

¿Cuál es la forma estándar de convertir las rutas de archivo: URL a archivo (..), siendo compatible con Java 6?

......

* Nota: estoy recibiendo estas URL de OpenOffice / LibreOffice (XModel.getURL ()).


Espero (no verificado exactamente) que Java más reciente haya traído el paquete y la ruta de nio. Ojalá lo haya arreglado: String s="C://some//ile.txt"; System.out.println(new File(s).toPath().toUri()); String s="C://some//ile.txt"; System.out.println(new File(s).toPath().toUri());


Java (al menos 5 y 6, java 7 rutas resueltas más) tiene un problema con UNC y URI. El equipo de Eclipse lo resumió aquí: http://wiki.eclipse.org/Eclipse/UNC_Paths

Desde java.io.File javadocs, el prefijo UNC es "////", y java.net.URI maneja el archivo: //// host / path (cuatro barras).

Puede encontrar más detalles sobre por qué sucede esto y los posibles problemas que causa en otros métodos de URI y URL en la lista de errores al final del enlace que se muestra arriba.

Usando estas informaciones, el equipo de Eclipse desarrolló la clase org.eclipse.core.runtime.URIUtil, cuyo código fuente probablemente puede ayudar cuando se trata de rutas UNC.


Sobre la base del comentario de @SotiriosDelimanolis, aquí se incluye un método para tratar las URL (como file: ...) y las que no son URL (como C: ...), usando FileSystemResource de Spring:

public FileSystemResource get(String file) { try { // First try to resolve as URL (file:...) Path path = Paths.get(new URL(file).toURI()); FileSystemResource resource = new FileSystemResource(path.toFile()); return resource; } catch (URISyntaxException | MalformedURLException e) { // If given file string isn''t an URL, fall back to using a normal file return new FileSystemResource(file); } }