¿Cómo abrir un archivo sin conocer su extensión pero sabiendo su nombre completo?

Intent tostart = new Intent(Intent.ACTION_VIEW); tostart.setDataAndType(Uri.parse(video_path+".***"), "video/*"); startActivity(tostart); 

Digamos que tengo una ruta de acceso de archivo

 /mnt/sdcard/video/my_birthday_moovie001 

'My_birthday_moovie001' puede ser .mkv , .mpg o .mkv . He intentado agregar ". ***" a la ruta del archivo pero todavía no puedo abrir el archivo.

Bueno, leí los comentarios que han almacenado su camino en db sin extensiones hay muchas extensiones que existe para Android no puede escoger automáticamente la extensión que tiene que crear alguna forma de detectar la extensión.

Siguiente es una manera robusta que es el mejor partido en su caso, pero no se recomienda en casos adecuados, donde las extensiones son conocidos

 public String chk_path(String filePath) { //create array of extensions String[] ext=new String[]{".mkv",".mpg"}; //You can add more as you require //Iterate through array and check your path which extension with your path exists String path=null; for(int i=0;i<ext.Length;i++) { File file = new File(filePath+ext[i]); if(file.exists()) { //if it exists then combine the extension path=filePath+ext[i]; break; } } return path; } 

Ahora para reproducir una canción en su código

 if(chk_path(video_path)!=null) { Intent tostart = new Intent(Intent.ACTION_VIEW); tostart.setDataAndType(Uri.parse(video_path), "video/*"); startActivity(tostart); } else //tell user that although the path in database but file on this path do not exists 

Bueno, ya que poner comentarios

Podría comparar si la ruta coincide con cualquier nombre de archivo (no contiene la extensión) y, a continuación, si lo tiene.

Simplemente puede hacer esto:

Obtener la ruta del directorio

 File extStore = Environment.getExternalStorageDirectory(); 

Establecer el nombre de archivo my_birthday_moovie001 en mi ejemplo me puse unnamed pero cambiarlo como tu gusta

 String NameOfFile = "unnamed"; 

Añadir los videos , lo pongo Downloads pero se puede cambiar

 String PathWithFolder = extStore + "/Download/"; 

Cree un método que enumere todos los archivos de su ruta de acceso

 private List<String> getListFiles(File parentDir) { ArrayList<String> inFiles = new ArrayList<String>(); File[] files = parentDir.listFiles(); for (File file : files) { if (file.isDirectory()) { inFiles.addAll(getListFiles(file)); } else { String AbsolutePath = file.getAbsolutePath(); //Get the file name ex : unnamed.jpg String nameofFile = AbsolutePath.substring(AbsolutePath.lastIndexOf("/") + 1, AbsolutePath.length()); //Remove the .jpg --> Output unnamed String fileNameWithoutExtension = nameofFile.substring(0, nameofFile.lastIndexOf('.')); //Add each file inFiles.add(fileNameWithoutExtension); } } return inFiles; } 

Tienes los nombres de los archivos haciendo esto

 List<String> files = getListFiles(new File(PathWithFolder)); 

Simplemente agregue un for que busque una coincidencia de su file

 for (int i = 0; i<=files.size()-1; i++){ if(PathWithFolder.equals(files.get(i))) { Toast.makeText(MainActivity.this, "You got it!", Toast.LENGTH_SHORT).show(); } else{ Toast.makeText(MainActivity.this, "You don't.", Toast.LENGTH_SHORT).show(); } } 

Si desea obtener el camino también y hacer lo que @Zain Ul Abidin propuesto y compararlo en el método getListFiles() agregue esto:

 String fileExtension = nameofFile.substring(nameofFile.lastIndexOf(".")); 

Espero eso ayude.

Usted puede intentar de esta manera, primero obtener el nombre del archivo y la extensión a continuación, finalmente comparar e implementar. Me gusta esto :

El nombre de archivo de ejemplo es 04chamelon y la extensión es .png:

 File f = new File("/mnt/storage/sdcard/Pictures/04chameleon"); File yourDir = new File("/mnt/storage/sdcard/Pictures"); nametwo = f.getName(); for (File fa : yourDir.listFiles()) { if (fa.isFile()) fa.getName(); String path = fa.getName(); // getting name and extension filextension = path.substring(path.lastIndexOf(".") + 1); // seperating extension name1 = fa.getName(); int pos = name1.lastIndexOf("."); if (pos > 0) { name1 = name1.substring(0, pos); } } if (name1.equals(nametwo)) { Intent tostart = new Intent(Intent.ACTION_VIEW); tostart.setDataAndType(Uri.parse(f + "." + filextension), "image/*"); //tostart.setDataAndType(Uri.parse(f + "." + filextension), "video/*"); startActivity(tostart); } 

De la otra pregunta:

Considere DirectoryScanner de Apache Ant:

 DirectoryScanner scanner = new DirectoryScanner(); scanner.setIncludes(new String[]{"**/*.java"}); scanner.setBasedir("C:/Temp"); scanner.setCaseSensitive(false); scanner.scan(); String[] files = scanner.getIncludedFiles(); 

Tendrá que hacer referencia a ant.jar (~ 1.3 MB para la hormiga 1.7.1).

Y luego, ejecutar en el array de archivos y comprobar si los archivos [i] .include (yourfile) yourfile = files [i]

  • Vida útil de BroadcastReceiver con respecto a los cambios de Android O
  • La intención de vinculación profunda no funciona
  • Quitar la actividad 2 y 3 de la pila trasera al iniciar la actividad 4
  • ¿Cómo puedo enviar datos utilizando el acabado?
  • No hay extras en Activity.getIntent () cuando vuelve a él desde un niño Actividad
  • FLAG_ACTIVITY_SINGLE_TOP no funciona
  • startActivity overridePendingTransition sólo muestra enter animation
  • Transmitir datos a BroadcastReceiver desde Actividad mediante DownloadManager
  • Haga clic en la notificación de Android mediante programación
  • ¿Cómo se puede iniciar una actividad desde BroadcastReceiver?
  • Diferencia entre Intent.FLAG_ACTIVITY_CLEAR_TASK e Intent.FLAG_ACTIVITY_TASK_ON_HOME
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.