En mi solicitud, cuando navegamos el archivo de sdcard del fichero será .text, archivo de vídeo .jpg y mpeg4ie. Quiero almacenar cada tipo de archivo en una carpeta particular. Por ejemplo, los archivos .text van a la carpeta de texto. Mi pregunta es cuando selecciono el archivo, ¿cómo reviso la extensión del archivo?Cómo comprobar extensión de archivo en Android
Respuesta
me gustaría tener el nombre del archivo como una cadena, dividirlo en una matriz con "" como el delimitador, y luego obtener el último índice de la matriz, que sería la extensión del archivo. Por ejemplo:
public class main {
public static void main(String[] args) {
String filename = "image.jpg";
String filenameArray[] = filename.split("\\.");
String extension = filenameArray[filenameArray.length-1];
System.out.println(extension);
}
}
que da salida:
jpg
no han tenido la oportunidad de ejecutar este (por lo que podrían no funcionar al 100%), pero debería ser lo que estás buscando:
File files[] = Environment.getExternalStorageDirectory().listFiles();
for (File f : files)
{
String fullPath = f.getAbsolutePath();
int dot = fullPath.lastIndexOf(".");
String ext = fullPath.substring(dot + 1);
if(ext.equalsIgnoreCase("txt")) // make sure case is irrelevant for your use case; otherwise use ext.equals("txt")
{
//do something with f here
}
}
Gracias Mike y Brenden, –
'if (ext.equals (txt))' en lugar de 'if (ext == "txt")' – IHeartAndroid
@IHeartAndroid actualizado, gracias! – brendan
también podría hacer algo como el endswith a continuación y uso.
public void walkdir(File dir) {
String txtPattern = ".txt";
String jpgPattern = ".jpg";
String mp3Pattern = ".mp3";
File listFile[] = dir.listFiles();
if (listFile != null) {
for (int i = 0; i < listFile.length; i++) {
if (listFile[i].isDirectory()) {
walkdir(listFile[i]);
} else {
if (listFile[i].getName().endsWith(txtPattern)){
//put in txt folder
}else if (listFile[i].getName().endsWith(jpgPattern.toLowerCase())){
// put in jpg folder
}else if (istFile[i].getName().endsWith(mp3Pattern.toLowerCase())) {
// put in mp3 folder
}
}
}
}
}
Lo sentimos, no hemos comprobado el trabajo, pero debería hacerlo por usted.
o usted podría hacer
MimeTypeMap.getFileExtensionFromUrl(myfile.toURL().toString());
Nota: este método no es muy fiable, aunque ..
como File # toURL() está en desuso? Esto debe ser myfile.toURI(). ToURL(). ToString() – Somatik
Esto no admite el nombre de archivo unicode. –
public static String getFileExt(String fileName) {
return fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
}
¿Puedes explicar la parte +1? – RoCk
@RoCK Sin el +1, sería, por ejemplo, ".jpg" en lugar de "jpg". Tenga en cuenta el punto. – newfivefour
Se puede simplificar como fileName.substring (fileName.lastIndexOf (".") + 1). – rzaaeeff
Si desea obtener todos los archivos que tienen extensiones específicas de una determinada directorio:
File[] files = (new File("/sdcard/yourDirectory/").listFiles(new CustomFilter());
....
class CustomFilter implements FileFilter
{
//Add the file extensions you want to look for here:
private String[] extension =
{ "text", "jpg", "jpeg", "mpeg" };
@Override
public boolean accept(File pathname)
{
String name = pathname.getName().toLowerCase();
for (String anExt : extension)
{
if (name.endsWith(anExt))
{
// A file has been detected with that extension
return true;
}
}
return false;
}
}
he encontrado buen ejemplo a docs.oracle.com cómo conseguir extensión de archivo que retu extensión del tipo de archivo de RN en minúsculas o null si no hay archivo de extensión:
/*
* Get the extension of a file.
*/
public static String getExtension(File f) {
String ext = null;
String s = f.getName();
int i = s.lastIndexOf('.');
if (i > 0 && i < s.length() - 1) {
ext = s.substring(i + 1).toLowerCase();
}
return ext;
}
Esto funciona para mí: se devuelve
public static String getExtension(String fileName) {
String encoded;
try { encoded = URLEncoder.encode(fileName, "UTF-8").replace("+", "%20"); }
catch(UnsupportedEncodingException e) { encoded = fileName; }
return MimeTypeMap.getFileExtensionFromUrl(encoded).toLowerCase();
}
Cuando el archivo es /mnt/sdcard/boomerang/2013-06-18_12:08:53.txt
, "txt"
.
Tenga en cuenta que las llamadas URLEncoder.encode
y .repalce
deben solucionar los problemas de fiabilidad que pueda ver cuando se llama al MimeTypeMap.getFileExtensionFromUrl
. Por ejemplo, sin la codificación y reemplazar las llamadas, nombres de archivo como "Test Image!.jpg"
devuelven cadenas vacías. También asegúrese de que el nombre del archivo esté en minúscula. Es MimeTypeMap
no parece tener entradas para .PNG
o .JPG
.
'String ext =" ", fileName = file.getName(). ToLowerCase(); try {ext = MimeTypeMap.getFileExtensionFromUrl (fileName); } catch (Exception e) {e.printStackTrace(); } 'funcionó para mí. – zanky
@zanky Eso sí funciona muchas veces, pero hay casos (no recuerdo cuáles exactamente, han pasado varios meses) en los que falla inesperadamente. En mi experiencia, al llamar 'Uri.encode' en el nombre del archivo condujo el caso de falla a cero. – Xavi
@Xavi ... ya, puede que tengas razón, pero en mi caso cuando usé 'Uri.Encode', volvía a codificar la extensión del archivo que tenía un formato algo así' 3gp% 4a% 5D ... 'así que eliminado el método codificar(). – zanky
public String getExtension(File file) {
String fileName = file.getName();
try {
if (fileName.contains("\\.")) {
String filenameArray[] = fileName.split("\\.");
extension = filenameArray[filenameArray.length - 1];
} else {
extension = "dir";
}
} catch (Exception e) {
extension = "err";
}
return extension;
}
El camino más corto para averiguar la extensión de archivo es el uso de lastIndexOf('.')
suponiendo que el nombre de archivo contiene extensión.Compruebe el siguiente código
String fileName = "test.jpg";
int i = fileName.lastIndexOf('.');
String fileExtension = fileName.substring(i+1);
Log.v("FILE EXTENSION: ",fileExtension);
Puede utilizar FilenameUtils de Apache Commons:
String extension = FilenameUtils.getExtension(mFile.getName());
Aquí es un método que sirve para probar todos los casos
String getExtension(String fileName){
final String emptyExtension = "";
if(fileName == null){
return emptyExtension;
}
int index = fileName.lastIndexOf(".");
if(index == -1){
return emptyExtension;
}
return fileName.substring(index + 1);
}
material es .endsWith ("su extensión")
String whatever = you String;
if(whatever.endsWith("jpg")){
// your jpg code
}else if(whatever.endsWith("png")){
// your png code
}
- 1. Comprobar la extensión de archivo en Java
- 2. Android cómo abrir un archivo de extensión .doc?
- 3. cómo comprobar el archivo abierto sin lsof
- 4. extensión de archivo MAKE
- 5. Agregar extensión de archivo a archivo de extensión-menos
- 6. extensión de archivo MAKE
- 7. Extensión de archivo JSON
- 8. Cómo comprobar si un archivo existe en un archivo MAKE
- 9. ¿Cómo abrir el archivo de extensión .msu?
- 10. Carrierwave cómo obtener la extensión de archivo
- 11. ¿Cómo puedo verificar la extensión de un archivo con Perl?
- 12. ¿Cómo validar una extensión de archivo solo si hay una extensión de archivo? Re: carrierwave
- 13. Obteniendo la extensión de archivo en C
- 14. Cambiando la extensión de archivo en Python
- 15. Retire y archivo de extensión
- 16. lotes: Retire extensión de archivo
- 17. Node.js obtener extensión de archivo
- 18. lotes extensión de archivo hallazgo
- 19. obtener extensión de archivo (editar)
- 20. Cómo cambiar la extensión de archivo en tiempo de ejecución
- 21. ¿Cómo comprobar si el archivo es binario?
- 22. Obtener extensión del archivo sin proporcionar extensión en la ruta
- 23. nombre de archivo sin extensión
- 24. Excluir una extensión de archivo en System.IO.Directory.GetFiles()
- 25. Extensión de archivo Json Schema
- 26. Extensión de Chrome: cómo guardar un archivo en el disco
- 27. cómo crear una extensión de archivo personalizada en C#?
- 28. ¿Cómo obtener la extensión de archivo en PHP?
- 29. Comprobar los permisos del archivo
- 30. Android, AsyncTask, ¿comprobar el estado?
suponiendo que existe una extensión, prefiero usar filename.substring (filename.lastIndexOf ('.') + 1) para obtener la extensión. Usar expresión regular para algo tan simple como este es exagerado (y es más lento). –
rrrrrray, ya sabes lo que dicen sobre asumir ... –
El punto que estoy tratando de transmitir es el de no usar la expresión regular para una tarea simple como esta, no la comprobación de errores. –