Quiero validar si todos los archivos en un directorio son de un cierto tipo. Lo que hice hasta ahora escompruebe si el archivo es de un tipo determinado
private static final String[] IMAGE_EXTS = { "jpg", "jpeg" };
private void validateFolderPath(String folderPath, final String[] ext) {
File dir = new File(folderPath);
int totalFiles = dir.listFiles().length;
// Filter the files with JPEG or JPG extensions.
File[] matchingFiles = dir.listFiles(new FileFilter() {
public boolean accept(File pathname) {
return pathname.getName().endsWith(ext[0])
|| pathname.getName().endsWith(ext[1]);
}
});
// Check if all the files have JPEG or JPG extensions
// Terminate if validation fails.
if (matchingFiles.length != totalFiles) {
System.out.println("All the tiles should be of type " + ext[0]
+ " or " + ext[1]);
System.exit(0);
} else {
return;
}
}
Esto funciona bien si el nombre del archivo tiene una extensión como {file.jpeg, archivo.jpg} Esta falla si los archivos no tienen extensiones {} archivo1 archivo2. Cuando hago lo siguiente en mi terminal me sale:
$ file folder/file1
folder/file1: JPEG image data, JFIF standard 1.01
Actualización 1:
He intentado conseguir los números mágicos del archivo para comprobar si es JPEG:
for (int i = 0; i < totalFiles; i++) {
DataInputStream input = new DataInputStream(
new BufferedInputStream(new FileInputStream(
dir.listFiles()[i])));
if (input.readInt() == 0xffd8ffe0) {
isJPEGFlag = true;
} else {
isJPEGFlag = false;
try {
input.close();
} catch (IOException ignore) {
}
System.out.println("File not JPEG");
System.exit(0);
}
}
Me encontré con otro problema. Hay algunos archivos .DS_Store en mi carpeta. ¿Alguna idea de cómo ignorarlos?
¿Quiere decir cómo verifica si el archivo que no tiene extensión es un archivo JPEG o no? –
¡Sí, tienes razón! –
El hecho de que un nombre de archivo termine con una extensión particular no significa que el _content_ de ese archivo corresponda a su nombre. Necesita leer el contenido del archivo (al menos los primeros N bytes) - eso es lo que hace el comando 'file' ... –