vacio sirve saber que para metodos guardar fin esta ejercicios como clase archivos archivo abrir java file find folder names

sirve - Java encuentra el inicio del nombre de archivo y la extensión



metodos archivos java (8)

¡Hola, casi he resuelto esto, pero ahora me he quedado atascado! Lo que tengo que hacer es mirar en una carpeta decir ...

String path = C://;

Luego necesito un bucle para ver cuántos archivos hay en esa carpeta decir 10. Necesito buscar archivos que comiencen como

LAYER.EXE-******.pf

***** puede cambiar dependiendo de otras cosas pero eso no es importante, lo que es, es asegurarse de que cuando encuentre un archivo que inicie LAYER.EXE, lo señale. ¡A continuación es en lo que he estado trabajando, me gustaría mucho como si fuera ayuda y gracias de antemano! :)

String path = "C://"; String files; File folder = new File(path); File[] listOfFiles = folder.listFiles(); for (int i = 0; i < listOfFiles.length; i++){ if (listOfFiles[i].isFile()){ files = listOfFiles[i].getName(); System.out.println(files); if (files == "LAYER.EXE.pf"){ System.out.println("found ================="); } } }


Desea comparar los nombres de los archivos usando una de las comparaciones de cadenas, probablemente files.startsWith("LAYER.EXE.pf") . equals() (en este caso) solo devuelve verdadero si los dos objetos son la misma instancia.


En primer lugar, para las comparaciones de cadenas en Java, necesita hacer .equals() lugar de == ya que == realmente solo evaluará a verdadero si las cadenas son el mismo objeto, en lugar de comparar los valores de las cadenas.

Entonces eso sería if(files.equal("LAYER.EXE.pf"))"

En segundo lugar, debe usar la función .startsWith() para comprobar si los primeros caracteres de una cadena coinciden con otra cadena.

Entonces, simplemente haz if(files.startsWith("LAYER.EXE")) y deberías estar bien


Para verificar una Cadena contra otra, no debe usar "==", sino el método equals, o bien comparará las referencias de los objetos en lugar de las expresiones. También puede usar un mejor bucle haciendo una iteración sobre su lista de archivos. Aquí está el código corregido:

String path = "C://"; String files; File folder = new File(path); File[] listOfFiles = folder.listFiles(); for (File checkedFile : listOfFiles){ if (checkedFile.isFile()){ files = checkedFile.getName(); System.out.println(files); if (files.equals("LAYER.EXE.pf")){ System.out.println("found ================="); } } }


Puede usar un FileFilter para obtener solo los archivos que se ajustan a su patrón de nombre. Me gusta esto:

String path = "C://"; File folder = new File(path); File[] listOfFiles = folder.listFiles(new FileFilter(){ public boolean accept(File f){ return (f.startsWith("LAYER.EXE")); } });

Y allí tendrá una matriz con todos los archivos que necesita, y solo ellos. Luego puede probar si la matriz es nula y si no maneja los archivos.


Puedes usar FileNameFilter

public void listFiles() { File f = new File("C:/"); String[] allFiles = f.list(new MyFilter ()); for (String filez:allFiles ) { System.out.println(filez); } } class MyFilter implements FilenameFilter { @Override public boolean accept(final File dir, final String name) { return name.startsWith("LAYER.EXE.pf"); } }


Si necesita archivos que comiencen con LAYER.EXE , LAYER.EXE mejor que cambie esto:

if (files == "LAYER.EXE.pf")

Dentro:

if (files.startsWith("LAYER.EXE.pf"))

Tenga en cuenta que == operador en cadenas en Java no se comportará como podría esperar. ¡Use los métodos equals o equalsIgnoreCase lugar!


Si necesita filtrar nombres de archivos, considere usar un filtro de nombre de archivo:

File[] files = directory.listFiles(new FilenameFilter() { public boolean accept(File dir, String fileName) { return fileName.startsWith("LAYER.EXE-") && fileName.endsWith(".pf"); } });

Este filtro se basa en sus requisitos y no en su implementación actual.

La matriz de files ahora solo contiene objetos de File cuyos nombres de archivo son aceptados por el filtro, en otras palabras, archivos que coinciden con el "patrón" LAYER.EXE-****.pf


files == "LAYER.EXE.pf"

cambiar a

"LAYER.EXE.pf".equals(files)

Lo que haces es una comparación de referencia, y necesitas la igualdad. Lea más aquí .

Contar más, esto le dará solo los archivos cuyo nombre es igual a "LAYER.EXE.pf".

Pruebe files.startsWith("LAYER.");