Voglio convalidare se tutti i file in una directory sono di un certo tipo. Quello che ho fatto finora è.controlla se il file è di un certo tipo
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;
}
}
Questo funziona bene se il nome del file ha estensione come {file.jpeg, File.jpg} questo non riesce se i file hanno estensioni {file1 file2}. Quando faccio la seguente nel mio terminale ottengo:
$ file folder/file1
folder/file1: JPEG image data, JFIF standard 1.01
Update 1:
Ho cercato di ottenere i numeri magici del file per verificare se è 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);
}
}
Mi sono imbattuto in un altro problema. Ci sono alcuni file .DS_Store nella mia cartella. Qualche idea su come ignorarli?
Vuoi dire come verificare se il file che non ha estensione è un file JPEG o no? –
Sì hai ragione !! –
Solo perché un nome file termina con una particolare estensione non significa che il contenuto di quel file corrisponda al suo nome. È necessario leggere il contenuto del file (almeno i primi N byte) - questo è ciò che il comando "file" fa ... –