(1)網(wǎng)絡(luò)傳輸狀況不好(如斷線過多,開的線程過多,服務(wù)器人太多導(dǎo)致不能連接太多等)導(dǎo)致下載下來的文件損壞!
目前成都創(chuàng)新互聯(lián)公司已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、淇縣網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
(2)站點(diǎn)提供的的RAR壓縮包本來就是損壞的(這個本站可以保證,所上傳的視頻及軟件等都經(jīng)過好幾遍測試,絕對沒問題)。
(3)所使用的下載工具不夠完善,比如有的下載工具多開了幾個線程后,下載的收尾工作很慢,有些時候下載到99%時數(shù)據(jù)就不再傳輸了,一定要人工操作才能結(jié)束(先停止下載接著再開始)。筆者就碰到過好幾次這樣的情況。結(jié)果是文件下載下來以后解壓縮到快結(jié)束時CRC出錯。
解決方法:本站為防止這樣的事情發(fā)生,在每個壓縮包里又加了一個備份,防止因以上原因?qū)е碌南螺d后不能用,還得重新下載的問題,只要你下載下來的那個壓縮包里的備份是好的那就能把壓縮包里的文件恢復(fù)能用。
步驟一:雙擊打開需要解壓修復(fù)的壓縮包,選擇:工具——修復(fù)壓縮文件。
步驟二:出現(xiàn)下邊圖片的修復(fù)框,等待修復(fù)完成,關(guān)閉窗口及解壓縮窗口就可以了。
步驟三:這時你會發(fā)現(xiàn)你需要解壓的壓縮包旁邊多了一個壓縮包,名稱為:fixed.***(你下載的視頻名稱).rar ,這個壓縮包就是修復(fù)后的解壓縮包,如果修復(fù)成功,解壓這個名稱為:fixed.***(你下載的視頻名稱).rar 的壓縮包就可以了。
如果修復(fù)不成功,你再修復(fù)幾次看看,如果不行,只有再重新下載了
package?com.javatest.techzero.gui;??
import?java.io.File;
import?java.io.FileInputStream;
import?java.io.FileOutputStream;
import?java.io.InputStream;
import?java.io.OutputStream;
import?java.util.zip.ZipEntry;
import?java.util.zip.ZipFile;
import?java.util.zip.ZipInputStream;?
public?class?ZipFileDemo?{
@SuppressWarnings("resource")
public?static?void?main(String?args[])?throws?Exception?{
File?file?=?new?File("d:"?+?File.separator?+?"test.zip");
File?outFile?=?null;
ZipFile?zipFile?=?new?ZipFile(file);
ZipInputStream?zipInput?=?new?ZipInputStream(new?FileInputStream(file));
ZipEntry?entry?=?null;
InputStream?input?=?null;
OutputStream?out?=?null;
while?((entry?=?zipInput.getNextEntry())?!=?null)?{
System.out.println("開始解壓縮"?+?entry.getName()?+?"文件。。。");
outFile?=?new?File("d:"?+?File.separator?+?entry.getName());
if?(!outFile.getParentFile().exists())?{
outFile.getParentFile().mkdir();
}
if?(!outFile.exists())?{
outFile.createNewFile();
}
input?=?zipFile.getInputStream(entry);
out?=?new?FileOutputStream(outFile);
int?temp?=?0;
while?((temp?=?input.read())?!=?-1)?{
SPAN?style="WHITE-SPACE:?pre"?/SPAN//System.out.println(temp);
out.write(temp);
}
input.close();
out.close();
}
System.out.println("Done!");
}
}
僅供參考
package com.io2.homework;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/*壓縮文件夾*/
public class MyMultipleFileZip
{
private String currentZipFilePath = "F:/MyZip.zip";
private String sourceFilePath;
private ZipOutputStream zos;
private FileInputStream fis;
public MyMultipleFileZip(String sourceFilePath)
{
try
{
this.sourceFilePath = sourceFilePath;
zos = new ZipOutputStream(new FileOutputStream(currentZipFilePath));
//設(shè)定文件壓縮級別
zos.setLevel(9);
} catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
// 在當(dāng)前條目中寫入具體內(nèi)容
public void writeToEntryZip(String filePath)
{
try
{
fis = new FileInputStream(filePath);
} catch (FileNotFoundException e1)
{
e1.printStackTrace();
}
byte[] buff = new byte[1024];
int len = 0;
try
{
while ((len = fis.read(buff)) != -1)
{
zos.write(buff, 0, len);
}
} catch (IOException e)
{
e.printStackTrace();
}finally
{
if (fis != null)
try
{
fis.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
// 添加文件條目
public void addFileEntryZip(String fileName)
{
try
{
zos.putNextEntry(new ZipEntry(fileName));
} catch (IOException e)
{
e.printStackTrace();
}
}
public void addDirectoryEntryZip(String directoryName)
{
try
{
zos.putNextEntry(new ZipEntry(directoryName + "/"));
} catch (IOException e)
{
e.printStackTrace();
}
}
// 遍歷文件夾
public void listMyDirectory(String filePath)
{
File f = new File(filePath);
File[] files = f.listFiles();
if(files!=null)
{
for (File currentFile : files)
{
// 設(shè)置條目名稱(此步驟非常關(guān)鍵)
String entryName= currentFile.getAbsolutePath().split(":")[1].substring(1);
// 獲取文件物理路徑
String absolutePath = currentFile.getAbsolutePath();
if (currentFile.isDirectory())
{
addDirectoryEntryZip(entryName);
//進(jìn)行遞歸調(diào)用
listMyDirectory(absolutePath);
}
else
{
addFileEntryZip(entryName);
writeToEntryZip(absolutePath);
}
}
}
}
// 主要流程
public void mainWorkFlow()
{
listMyDirectory(this.sourceFilePath);
if(zos!=null)
try
{
zos.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
new MyMultipleFileZip("F:/fountainDirectory").mainWorkFlow();
}
}