173 votes

Obtenir le nom de fichier de l’URL

En Java, un ou un sous la forme de , ce qui est le plus simple pour obtenir le nom de fichier, moins l’extension ? Ainsi, dans cet exemple, je cherche quelque chose qui renvoie .

Je peux penser à plusieurs façons de le faire, mais je cherche quelque chose qui est facile à lire et court.

223voto

Adrian B. Points 1952

Au lieu de réinventer la roue, que diriez-vous en utilisant Apache commons-io:

211voto

Real Red. Points 2153
String fileName = url.substring( url.lastIndexOf('/')+1, url.length() );

String fileNameWithoutExtn = fileName.substring(0, fileName.lastIndexOf('.'));

26voto

tehvan Points 3949

Cela devrait tout couper (je vais laisser la gestion des erreurs pour vous) :

14voto

Mike Points 99
public static String getFileName(URL extUrl) {
		//URL: "http://photosaaaaa.net/photos-ak-snc1/v315/224/13/659629384/s659629384_752969_4472.jpg"
		String filename = "";
		//PATH: /photos-ak-snc1/v315/224/13/659629384/s659629384_752969_4472.jpg
		String path = extUrl.getPath();
		//Checks for both forward and/or backslash 
		//NOTE:**While backslashes are not supported in URL's 
		//most browsers will autoreplace them with forward slashes
		//So technically if you're parsing an html page you could run into 
		//a backslash , so i'm accounting for them here;
		String[] pathContents = path.split("[\\\\/]");
		if(pathContents != null){
			int pathContentsLength = pathContents.length;
			System.out.println("Path Contents Length: " + pathContentsLength);
			for (int i = 0; i < pathContents.length; i++) {
				System.out.println("Path " + i + ": " + pathContents[i]);
			}
			//lastPart: s659629384_752969_4472.jpg
			String lastPart = pathContents[pathContentsLength-1];
			String[] lastPartContents = lastPart.split("\\.");
			if(lastPartContents != null && lastPartContents.length > 1){
				int lastPartContentLength = lastPartContents.length;
				System.out.println("Last Part Length: " + lastPartContentLength);
				//filenames can contain . , so we assume everything before
				//the last . is the name, everything after the last . is the 
				//extension
				String name = "";
				for (int i = 0; i < lastPartContentLength; i++) {
					System.out.println("Last Part " + i + ": "+ lastPartContents[i]);
					if(i < (lastPartContents.length -1)){
						name += lastPartContents[i] ;
						if(i < (lastPartContentLength -2)){
							name += ".";
						}
					}
				}
				String extension = lastPartContents[lastPartContentLength -1];
				filename = name + "." +extension;
				System.out.println("Name: " + name);
				System.out.println("Extension: " + extension);
				System.out.println("Filename: " + filename);
			}
		}
		return filename;
	}

9voto

Sietse Points 3240

Je suis venu avec ceci :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X