2010-05-16 18 views
11

je reçois l'exception: « schéma d'URI est un fichier non »n'est pas « fichier »

Ce que je fais est d'essayer d'obtenir le nom d'un fichier, puis enregistrez ce fichier (à partir d'un autre serveur) sur mon ordinateur/serveur depuis une servlet.

J'ai une chaîne appelée « url », à partir de celui-ci voici mon code:

url = Streams.asString(stream); //gets the URL from a form on a webpage 
System.out.println("This is the URL: "+url); 
URI fileUri = new URI(url); 

File fileFromUri = new File(fileUri);     

onlyFile = fileFromUri.getName(); 
URL fileUrl = new URL(url); 
InputStream imageStream = fileUrl.openStream(); 
String fileLoc2 = getServletContext().getRealPath("pics/"+onlyFile); 

File newFolder = new File(getServletContext().getRealPath("pics")); 
    if(!newFolder.exists()){ 
     newFolder.mkdir(); 
    } 
    IOUtils.copy(imageStream, new FileOutputStream("pics/"+onlyFile)); 
} 

La ligne provoque l'erreur est celle-ci:

File fileFromUri = new File(fileUri);     

J'ai ajouté le reste du code afin que vous puissiez voir ce que je suis en train de faire.

Répondre

25

Le "schéma" URI est la chose qui précède le ":", par exemple "http" dans "http://stackoverflow.com".

Le message d'erreur vous indique que new File(fileUri) ne fonctionne que sur les "fichiers:" URI (ceux qui se réfèrent à un chemin sur le système actuel), pas d'autres schémas comme "http". Fondamentalement, l'URI "file:" est une autre façon de spécifier un chemin d'accès à la classe File. Ce n'est pas une manière magique de dire à File d'utiliser http pour aller chercher un fichier sur le web.

3

Votre hypothèse pour créer File de URL est erronée ici.

Vous n'avez simplement pas besoin de créer un File de l'URL vers le fichier sur Internet, de sorte que vous obteniez le nom du fichier.

Vous pouvez simplement faire avec l'analyse de l'URL comme ça:

URL fileUri = new URL("http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/domefisheye/ladybug/fish4.jpg");  
int startIndex = fileUri.toString().lastIndexOf('/'); 
String fileName = fileUri.toString().substring(startIndex + 1); 
System.out.println(fileName); 
+0

Merci c'est également très utile. – Ankur