我試圖從互聯網下載.torrent文件。一些在線文件是壓縮(gzipped)格式。我知道我可以解壓縮用下面的代碼文件:不是GZIP格式Java
try (InputStream is = new GZIPInputStream(website.openStream())) {
Files.copy(is, Paths.get(path));
is.close();
}
但一些的.torrent文件都不會被壓縮,因此我得到的錯誤信息:
java.util.zip.ZipException: Not in GZIP format
我處理一個.torrent文件的大型數據庫,所以如果它被壓縮,我不能一一解壓。如何知道.torrent文件是否被壓縮,並且只有在壓縮文件時才解壓縮文件?
僞代碼:
if(file is compressed){
unzip
download
}else{
download
SOLUTION:
try (InputStream is = new GZIPInputStream(website.openStream())) {
Files.copy(is, Paths.get(path + "GZIP.torrent"));
is.close();
} catch (ZipException z) {
File f = new File(path + ".torrent");
FileOutputStream fos = new FileOutputStream(f);
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
}
內容類型報頭可以揭示該文件是否被壓縮或不啓動;你可以通過打開你的URL connection = website.openConnection(),然後打印connection.getContentType()來調試內容類型。 – Vulcan
請不要編輯問題以顯示解決方案,但也可以將其添加爲答案 – Mark
另外,依靠拋出異常來執行代碼中的某些操作通常不是很好的做法......如果您可以檢測它是否是在引發異常之前的gzip文件,它會好得多。在我看來,你可以用一個簡單的'if(Paths.get(path).contains(「GZIP」)){/ *處理gzip代碼/ *} else {/ *處理非gzip代碼* /} – SnakeDoc