Chcę sprawdzić, czy wszystkie pliki w katalogu są określonego typu. To, co zrobiłem do tej pory, to.Sprawdź, czy plik jest określonego typu.
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;
}
}
Działa to dobrze, jeśli nazwa pliku ma rozszerzenie jak {file.jpeg, file.jpg} ta zawodzi, jeśli pliki nie mają rozszerzenia {plik1 plik2}. Kiedy należy wykonać następujące czynności w moim terminalu uzyskać:
$ file folder/file1
folder/file1: JPEG image data, JFIF standard 1.01
Aktualizacja 1:
Próbowałem dostać magiczne numery pliku, aby sprawdzić, czy jest 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);
}
}
Wpadłem na inny problem. W moim folderze znajduje się kilka plików: .DS_Store. Każdy pomysł, jak je zignorować?
Masz na myśli, w jaki sposób możesz sprawdzić, czy plik bez rozszerzenia jest plikiem JPEG, czy nie? –
Tak, masz rację !! –
To, że nazwa pliku kończy się określonym rozszerzeniem, nie oznacza, że _content_ tego pliku odpowiada jego nazwie. Musisz przeczytać zawartość pliku (przynajmniej pierwsze N bajtów) - to właśnie robi polecenie "file" ... –