Jak sprawdzić, czy plik jest gzip, czy nie w java. Sprawdziłem, czytając pierwsze 2 bajty i porównując z magicznym kodem. Ale w przypadku dużych plików pobieranie OutOfMemoryError. Ktoś wie w inny sposób to zrobić?Jak sprawdzić, czy plik jest gzip lub nie w java
Odpowiedz
użyć tego pakietu, który znalazłem na google:
package example;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.util.zip.GZIPInputStream;
public class GZipUtil {
/**
* Checks if an input stream is gzipped.
*
* @param in
* @return
*/
public static boolean isGZipped(InputStream in) {
if (!in.markSupported()) {
in = new BufferedInputStream(in);
}
in.mark(2);
int magic = 0;
try {
magic = in.read() & 0xff | ((in.read() << 8) & 0xff00);
in.reset();
} catch (IOException e) {
e.printStackTrace(System.err);
return false;
}
return magic == GZIPInputStream.GZIP_MAGIC;
}
/**
* Checks if a file is gzipped.
*
* @param f
* @return
*/
public static boolean isGZipped(File f) {
int magic = 0;
try {
RandomAccessFile raf = new RandomAccessFile(f, "r");
magic = raf.read() & 0xff | ((raf.read() << 8) & 0xff00);
raf.close();
} catch (Throwable e) {
e.printStackTrace(System.err);
}
return magic == GZIPInputStream.GZIP_MAGIC;
}
public static void main(String[] args) throws FileNotFoundException {
File gzf = new File("/tmp/1.gz");
// Check if a file is gzipped.
System.out.println(isGZipped(gzf));
// Check if a input stream is gzipped.
System.out.println(isGZipped(new FileInputStream(gzf)));
}
}
Jeśli drugi 'read()' wyrzuci 'IOException', zużyjesz bajt. Jeśli parametr 'in' nie obsługuje' mark', zawijanie przy użyciu 'BufferedInputStream' nie ma znaczenia: Nadal zużywałbyś 2 bajty ze strumienia, który otrzymałeś. W obu przypadkach osoba dzwoniąca nie jest świadoma, że "jest GZipped". Przepraszam, muszę głosować w dół. – Andreas
Trzeba tylko przeczytać w 2 bajty z pliku, jeśli to wszystko jesteś sprawdzanie, to brzmi jakbyś ciągnąc cały plik do pamięci .
https://docs.oracle.com/javase/tutorial/essential/io/datastreams.html
Użyj strumień wejściowy gzip http://docs.oracle.com/javase/7/docs/api/java/util/zip/GZIPInputStream.html. Zgłasza wyjątek ZipException, jeśli spróbujesz otworzyć inny format. W twoim kodzie możesz złapać ten wyjątek w blokadzie bloków.
Używanie wyjątków do kontrolowania przepływu programu jest generalnie pomarszczone, gdy sprawdziłem. –
Spróbuj Files.probeContentType(Path) [JDK 7]
Path source = Paths.get("D:/myfiles/a.zip");
System.out.println(Files.probeContentType(source));
wyjście
application/x-zip-compressed
To właśnie używam
private static void decompressGzipFile(String gzipFilePath, String newFilePath) {
try {
FileInputStream fis = new FileInputStream(gzipFile);
GZIPInputStream gis = new GZIPInputStream(fis);
// If this line does not throw exception your file is GZip
// Your logic
} catch (IOException e) {
//Not in GZip Format
}
}
- 1. Jak sprawdzić, czy plik jest skompresowany gzip?
- 2. Sposób by sprawdzić czy CapsLock jest lub nie w java
- 3. Jak sprawdzić, czy plik jest ASCII lub Binary w PHP
- 4. Jak sprawdzić, czy ścieżka jest względna lub bezwzględna w java
- 5. AppleScript: Jak sprawdzić, czy coś jest katalog lub plik
- 6. Jak sprawdzić, czy plik jest plikiem EXE lub DLL?
- 7. Jak sprawdzić, czy plik jest zwykłym tekstem?
- 8. Jak sprawdzić, czy plik node.js jest zainstalowany czy nie
- 9. Jak sprawdzić, czy plik jest binarny?
- 10. Jak sprawdzić, czy plik Global.asax jest wywoływany
- 11. Jak sprawdzić, czy Java Future jest kompletna?
- 12. Jak sprawdzić, czy plik jest obrazkiem?
- 13. Jak sprawdzić, czy plik jest pusty?
- 14. Jak sprawdzić, czy plik lub katalog plików istnieje w bash?
- 15. Jak sprawdzić, czy działka jest kompletny lub nie
- 16. Jak sprawdzić, czy klasa Java jest abstrakcyjna?
- 17. Jak sprawdzić, czy ciąg nie jest równy obiekt lub inne wartości ciągu w java?
- 18. jak sprawdzić, czy jest zainstalowany mangusta (MongoDB) lub nie
- 19. Jak sprawdzić, czy JSONObject jest pusty lub nie istnieje
- 20. Jak sprawdzić, czy plik lub katalog istnieje bez użycia fs.ist?
- 21. Jak sprawdzić, czy plik wejściowy jest pusty w JQuery
- 22. Jak sprawdzić, czy plik istnieje w pilocie?
- 23. Jak sprawdzić, czy plik jest wykonywalny w pliku node.js?
- 24. Java - Jak sprawdzić, czy podział jest liczbą całkowitą czy zmiennoprzecinkową?
- 25. Jak sprawdzić, czy plik istnieje w ansibla?
- 26. Jak sprawdzić, czy Czytelnik jest w EOF?
- 27. Jak sprawdzić, czy dany wiersz kodu jest napisany w java?
- 28. Jak sprawdzić, czy Textarea jest pusta w JavaScript lub Jquery?
- 29. Jak sprawdzić, czy JSONArray jest pusty w java?
- 30. Jak sprawdzić, czy obraz jest załadowany lub buforowany w JQuery?
Pokaż swój kod proszę, masz spojrzał na sposobów, aby tylko czytać część pliku? – reto
... więc aby móc sprawdzić pierwsze 2 bajty, w których cały plik zapełniasz w pamięci? – Gimby
użyć podklas InputStream w pakiecie java.io – cybersoft