Estoy buscando un archivo de sonido en una carpeta y quiero saber si el archivo de sonido que existen pueden ser .mp3,.mp4,etc.Sólo quiero para asegurarse de que el nombre del archivo(sin la extensión) existe.

por ejemplo.Búsqueda de archivos /home/usuario/escritorio/sonido/un

vuelta encontró a si cualquier.mp3 o un.mp4 o a.txt etc. existen.

He intentado esto:

File f=new File(fileLocationWithExtension);

if(f.exist())
   return true;
else return false;

Pero aquí me tiene que pasar a la extensión también de lo contrario, su devolviendo false siempre

A cualquiera que venga aquí,esta es la mejor manera que se me ocurrió

    public static void main(String[] args) {
    File directory=new File(your directory location);//here /home/user/desktop/sound/
    final String name=yourFileName;  //here a;
            String[] myFiles = directory.list(new FilenameFilter() {
                public boolean accept(File directory, String fileName) {
                    if(fileName.lastIndexOf(".")==-1) return false;
                    if((fileName.substring(0, fileName.lastIndexOf("."))).equals(name))
                        return true;
                    else return false;
                }
            });
   if(myFiles.length()>0)
       System.Out.println("the file Exist");
}

Desventaja:Se continuará en la búsqueda, incluso si se encuentra el archivo que yo nunca la intención de mi pregunta.Cualquier sugerencia es bienvenida

  • Soy capaz de successfuly a la conclusión de que si un archivo existe pero tengo que proporcionan una extensión de
  • Está usted usando Java 6 o Java 7?
  • Lo he editado con lo que he probado hasta ahora
  • Esto puede ayudar (una reciente respuesta que he publicado) stackoverflow.com/questions/17652826/… . Cambiar la coincidencia de criterios y compruebe el tamaño de la matriz después.
  • java -versión en ubuntu terminal da la versión de java «1.7.0_21» Java(TM) SE Runtime Environment (build 1.7.0_21-b11) de Java HotSpot(TM) 64-Bit Server VM (construir 23.21-b01, de modo mixto)
  • usted puede hacer como mi respuesta

InformationsquelleAutor user2511713 | 2013-07-17

7 Comentarios

  1. 6

    Este código va a hacer el truco..

    public static void listFiles() {
    
            File f = new File("C:/"); //use here your file directory path
            String[] allFiles = f.list(new MyFilter ());
            for (String filez:allFiles ) {
                System.out.println(filez);
            }
        }
    }
            class MyFilter implements FilenameFilter {
            @Override
            //return true if find a file named "a",change this name according to your file name
            public boolean accept(final File dir, final String name) {
                return ((name.startsWith("a") && name.endsWith(".jpg"))|(name.startsWith("a") && name.endsWith(".txt"))|(name.startsWith("a") && name.endsWith(".mp3")|(name.startsWith("a") && name.endsWith(".mp4"))));
    
            }
        }

    Código de arriba encontrará una lista de los archivos que tienen el nombre un.

    He utilizado 4 extensiones de aquí para probar(.jpg,.mp3,.mp4,.txt).Si usted necesita más, sólo añadir en boolean accept() método.

    EDICIÓN :

    Aquí está la mayoría de la versión simplificada de lo que el OP quiere.

    public static void filelist()
        {
            File folder = new File("C:/");
            File[] listOfFiles = folder.listFiles();
    
        for (File file : listOfFiles)
        {
            if (file.isFile())
            {
                String[] filename = file.getName().split("\.(?=[^\.]+$)"); //split filename from it's extension
                if(filename[0].equalsIgnoreCase("a")) //matching defined filename
                    System.out.println("File exist: "+filename[0]+"."+filename[1]); //match occures.Apply any condition what you need
            }
         }
    }

    De salida:

    File exist: a.jpg   //These files are in my C drive
    File exist: a.png
    File exist: a.rtf
    File exist: a.txt
    File exist: a.mp3
    File exist: a.mp4

    Este código comprueba todos los archivos de una ruta de acceso.Se dividirá todos los nombres de archivo de sus extensiones.Y el último de todos, cuando se produce una coincidencia con el definido nombre de archivo, a continuación, se imprimirá la que nombre de archivo.

    • he cambiado el código y funciona perfectamente ahora,por lo que puede volver a considerar su downvote?
    • informarme si esto es lo que quieres.
    • Me gustaría modificar ligeramente el accept método para mejorar el rendimiento: public boolean accept(final File dir, final String name) { if (name.charAt(0) != 'a') { return false; if (name.endsWith(".jpg")||name.endsWith(".txt")||name.endsWith(".mp3")||name.endsWith(".mp4")) { return true; } return false;}
    • El código ahora va a trabajar .jpg,.mp3,.mp4,.txt .Yo lo quiero para trabajar con cualquier archivo de extensión no importa qué.eche un vistazo a mi respuesta
    • Pero no mencionó que anteriormente en su pregunta,u mencionado sólo 3 formatos de allí.Así que asegúrese de que acerca de lo que quieres antes de hacer una pregunta y mencionar claramente que.
    • Véase mi edición,esperamos que lo que usted desea.

  2. 1

    Si usted está buscando para cualquier archivo con el nombre "a" independientemente del sufijo, el glob que estás buscando es a{,.*}. El glob es el tipo de lenguaje de la expresión regular utilizada por los proyectiles y la API de Java para que coincida con los nombres de archivo. Desde Java 7, Java tiene soporte para globs.

    Este Glob explicó

    • {} introduce una alternativa. Las alternativas son separados con ,. Ejemplos:
      • {foo,bar} coincide con los nombres de los archivos foo y bar.
      • foo{1,2,3} coincide con los nombres de los archivos foo1, foo2 y foo3.
      • foo{,bar} coincide con los nombres de los archivos foo y foobar – una alternativa puede ser vacía.
      • foo{,.txt} coincide con los nombres de los archivos foo y foo.txt.
    • * representa cualquier número de caracteres de cualquier tipo, incluyendo el cero caracteres. Ejemplos:
      • f* coincide con los nombres de los archivos f, fa, faa, fb, fbb, fab, foo.txt – todos los archivos que se nombre empieza con f.
    • La combinación es posible. a{,.*} es el de las alternativas de a y a.*, para que coincida con el nombre de archivo a así como de cada nombre de archivo que comienza con a., como a.txt.

    Un programa en Java que muestra todos los archivos en el directorio actual que han "a" como su nombre, independientemente de que el sufijo se parece a esto:

    import java.io.*;
    import java.nio.file.*;
    public class FileMatch {
        public static void main(final String... args) throws IOException {
            try (final DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get("."), "a{,.*}")) {
                for (final Path entry : stream) {
                    System.out.println(entry);
                }
            }
        }
    }

    o con Java 8:

    import java.io.*;
    import java.nio.file.*;
    public class FileMatch {
        public static void main(final String... args) throws IOException {
            try (final DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get("."), "a{,.*}")) {
                stream.forEach(System.out::println);
            }
        }
    }

    Si usted tiene el nombre del archivo en una variable y quieres ver si coincide con la dada glob, puede utilizar el FileSystem.getPathMatcher() método para obtener un PathMatcher que coincide con el pegote, como este:

    final FileSystem fileSystem = FileSystems.getDefault();
    final PathMatcher pathMatcher = fileSystem.getPathMatcher("glob:a{,.*}");
    final boolean matches = pathMatcher.matches(new File("a.txt").toPath());
  3. 0

    Puedes probar algo como esto

    File folder = new File("D:\DestFile");
    File[] listOfFiles = folder.listFiles();
    
    for (File file : listOfFiles) {
    if (file.isFile()) {
        System.out.println("found ."+file.getName().substring(file.getName().lastIndexOf('.')+1));
    }
    }
    • Mejor: java.io.Archivo.lista(FilenameFilter); si (listOfFiles.longitud > 0) {System.a cabo.println(«encontrado»);}
    • «a» es en realidad el nombre del archivo.la carpeta contiene muchos archivos(alrededor de 1000).será aconsejable utilizar este método?
    • es «/home/usuario/escritorio/sonido/a»?
    • ahora tienes todos los tipos de archivo
    • Puede hacerlo de esta manera
    • Se puede editar el código y hacerlo de la forma «agad», explicó?
    • sí, he corregido

  4. 0

    Intente esto:

            File parentDirToSearchIn = new File("D:\DestFile");
            String fileNameToSearch = "a";
            if (parentDirToSearchIn != null && parentDirToSearchIn.isDirectory()) {
                String[] childFileNames = parentDirToSearchIn.list();
                for (int i = 0; i < childFileNames.length; i++) {
                    String childFileName = childFileNames[i];
                    //Get actual file name i.e without any extensions..
                    final int lastIndexOfDot = childFileName.lastIndexOf(".");
                    if(lastIndexOfDot>0){
                        childFileName = childFileName.substring(0,lastIndexOfDot );
                        if(fileNameToSearch.equalsIgnoreCase(childFileName)){
                            System.out.println(childFileName);
                        }
                    }//otherwise it could be a directory or file without any extension!
                }
            }
  5. 0

    Se puede hacer uso de la SE 7 DirectoryStream clase :

    public List<File> scan(File file) throws IOException {
        Path path = file.toPath();
        try (DirectoryStream<Path> paths = Files.newDirectoryStream(path.getParent(), new FileNameFilter(path))) {
            return collectFilesWithName(paths);
        }
    }
    
    private List<File> collectFilesWithName(DirectoryStream<Path>paths) {
        List<File> results = new ArrayList<>();
        for (Path candidate : paths) {
            results.add(candidate.toFile());
        }
        return results;
    }
    
    private class FileNameFilter implements DirectoryStream.Filter<Path> {
        final String fileName;
    
        public FileNameFilter(Path path) {
            fileName = path.getFileName().toString();
        }
    
        @Override
        public boolean accept(Path entry) throws IOException {
            return Files.isRegularFile(entry) && fileName.equals(fileNameWithoutExtension(entry));
        }
    
        private String fileNameWithoutExtension(Path candidate) {
            String name = candidate.getFileName().toString();
            int extensionIndex = name.lastIndexOf('.');
            return extensionIndex < 0 ? name : name.substring(0, extensionIndex);
        }
    
    }

    Esto devolverá los archivos con la extensión, o incluso sin extensión, siempre y cuando la base de nombre de archivo que coincida con el Archivo dado, y está en el mismo directorio.

    La FileNameFilter clase hace que el flujo de retorno de sólo los partidos que le interesa.

  6. 0
    public static boolean everExisted() {
        File directory=new File(your directory location);//here /home/user/desktop/sound/
                final String name=yourFileName;  //here a;
                        String[] myFiles = directory.list(new FilenameFilter() {
                            public boolean accept(File directory, String fileName) {
                                if(fileName.lastIndexOf(".")==-1) return false;
                                if((fileName.substring(0, fileName.lastIndexOf("."))).equals(name))
                                    return true;
                                else return false;
                            }
                        });
               if(myFiles.length()>0)
                   return true;
            }
    }

    Cuando se devuelve, se detendrá el método.

  7. -1

    Probar este

    FileLocationWithExtension = "nameofFile"+ ".*"
    • Pruébalo por qué? ¿Cómo esta la respuesta a la pregunta?
    • no su trabajo..
    • no sé cómo funciona en java pero asterisco volvería cualquier nombre y cualquier extensión que se pueden encontrar en un directorio
    • No con java.io.Archivo no. Obviamente no lo he probado. -1
    • no.Quiero devolver true si /home/usuario/escritorio/sonido/a.* está disponible donde * representa cualquier tipo.
    • Hacer de su mente. O bien no funciona o no se contesta a la pregunta. No ambos al mismo tiempo.
    • He dicho que no su trabajo en el segundo comentario
    • mi solución.Funciona ahora.

Dejar respuesta

Please enter your comment!
Please enter your name here