Quelqu'un peut-il me dire comment obtenir le nom du fichier sans l'extension ? Par exemple :
fileNameWithExt = "test.xml";
fileNameWithOutExt = "test";
Quelqu'un peut-il me dire comment obtenir le nom du fichier sans l'extension ? Par exemple :
fileNameWithExt = "test.xml";
fileNameWithOutExt = "test";
Si, comme moi, vous préférez utiliser le code d'une bibliothèque où l'on a probablement pensé à tous les cas particuliers, comme ce qui se passe si l'on passe en mode null ou des points dans le chemin mais pas dans le nom du fichier, vous pouvez utiliser ce qui suit :
import org.apache.commons.io.FilenameUtils;
String fileNameWithOutExt = FilenameUtils.removeExtension(fileNameWithExt);
Vous pouvez également utiliser FilenameUtils.getBasename pour passer directement d'une chaîne de chemin à un nom de fichier sans extension.
Le moyen le plus simple est d'utiliser une expression régulière.
fileNameWithOutExt = "test.xml".replaceFirst("[.][^.]+$", "");
L'expression ci-dessus supprimera le dernier point suivi d'un ou plusieurs caractères. Voici un test unitaire de base.
public void testRegex() {
assertEquals("test", "test.xml".replaceFirst("[.][^.]+$", ""));
assertEquals("test.2", "test.2.xml".replaceFirst("[.][^.]+$", ""));
}
Regex n'est pas aussi facile à utiliser que la solution de bibliothèque ci-dessus. Elle fonctionne, mais en regardant le code (sans avoir à interpréter la REGEX), ce qu'elle fait n'est pas évident.
GustavoLitovsky Android n'est pas livré avec org.apache.commons
. Pour autant que je sache, c'est le seul moyen de le faire dans Android.
/* la regex suivante supprime également le chemin */ "/the/path/name.extension".replaceAll(".*[ \\\\ /]| \\. [^ \\. ]*$","") ;
Voir le programme de test suivant :
public class javatemp {
static String stripExtension (String str) {
// Handle null case specially.
if (str == null) return null;
// Get position of last '.'.
int pos = str.lastIndexOf(".");
// If there wasn't any '.' just return the string as is.
if (pos == -1) return str;
// Otherwise return the string, up to the dot.
return str.substring(0, pos);
}
public static void main(String[] args) {
System.out.println ("test.xml -> " + stripExtension ("test.xml"));
System.out.println ("test.2.xml -> " + stripExtension ("test.2.xml"));
System.out.println ("test -> " + stripExtension ("test"));
System.out.println ("test. -> " + stripExtension ("test."));
}
}
qui sort :
test.xml -> test
test.2.xml -> test.2
test -> test
test. -> test
Quelle est l'extension de foo.tar.gz
? Je peux comprendre pourquoi .tar.gz
serait ce que vous voudriez.
@tchrist, foo.tar.gz
est une version gzippée de foo.tar
donc vous pourriez aussi argumenter que gz
était l'extension. Tout se résume à comment vous définissez l'extension.
Si votre projet utilise Goyave (14.0 ou plus récent), vous pouvez opter pour la solution suivante Files.getNameWithoutExtension()
.
(Essentiellement la même chose que FilenameUtils.removeExtension()
d'Apache Commons IO, comme l'a fait la réponse la plus votée suggère. Je voulais juste signaler que Guava fait ça aussi. Personnellement, je n'ai pas voulu ajouter de dépendance à Commons - qui me semble être un peu une relique - juste à cause de cela).
Bien que je sois un grand partisan de la réutilisation des bibliothèques, la org.apache.commons.io JAR est de 174KB, ce qui est remarquablement grand pour une application mobile.
Si vous téléchargez le code source et que vous jetez un coup d'œil à la classe FilenameUtils, vous verrez qu'il y a beaucoup d'utilitaires supplémentaires, et qu'elle gère les chemins Windows et Unix, ce qui est très bien.
Toutefois, si vous souhaitez simplement disposer de quelques méthodes utilitaires statiques à utiliser avec des chemins de style Unix (avec un séparateur "/"), le code ci-dessous peut vous être utile.
Le site removeExtension
conserve le reste du chemin d'accès ainsi que le nom du fichier. Il existe également une méthode similaire getExtension
.
/**
* Remove the file extension from a filename, that may include a path.
*
* e.g. /path/to/myfile.jpg -> /path/to/myfile
*/
public static String removeExtension(String filename) {
if (filename == null) {
return null;
}
int index = indexOfExtension(filename);
if (index == -1) {
return filename;
} else {
return filename.substring(0, index);
}
}
/**
* Return the file extension from a filename, including the "."
*
* e.g. /path/to/myfile.jpg -> .jpg
*/
public static String getExtension(String filename) {
if (filename == null) {
return null;
}
int index = indexOfExtension(filename);
if (index == -1) {
return filename;
} else {
return filename.substring(index);
}
}
private static final char EXTENSION_SEPARATOR = '.';
private static final char DIRECTORY_SEPARATOR = '/';
public static int indexOfExtension(String filename) {
if (filename == null) {
return -1;
}
// Check that no directory separator appears after the
// EXTENSION_SEPARATOR
int extensionPos = filename.lastIndexOf(EXTENSION_SEPARATOR);
int lastDirSeparator = filename.lastIndexOf(DIRECTORY_SEPARATOR);
if (lastDirSeparator > extensionPos) {
LogIt.w(FileSystemUtil.class, "A directory separator appears after the file extension, assuming there is no file extension");
return -1;
}
return extensionPos;
}
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.
0 votes
Duplicata possible de Comment obtenir le nom d'un fichier à partir de son chemin d'accès dans Android ?