Java HTTP下载-有时文件下载不完整而没有错误

Java HTTP下载-有时文件下载不完整而没有错误,java,file,download,inputstream,outputstream,Java,File,Download,Inputstream,Outputstream,我正在尝试开发一个小型Java下载程序。但有时候,我找不到什么时候,一次下载就少了几个百分点。一次下载后会损坏,每次下载后也会损坏。我不知道我的问题出在哪里,尝试了一些不同的输出缓冲区,但没有成功。以下是下载线程的来源: private void startDownload(){ 试一试{ ins=null; outb=null; 设置正在运行(真); //Erstelle HttpURLConnection Objekt zur Anfrage一个den服务器 con=(HttpURLConn

我正在尝试开发一个小型Java下载程序。但有时候,我找不到什么时候,一次下载就少了几个百分点。一次下载后会损坏,每次下载后也会损坏。我不知道我的问题出在哪里,尝试了一些不同的输出缓冲区,但没有成功。以下是下载线程的来源:

private void startDownload(){
试一试{
ins=null;
outb=null;
设置正在运行(真);
//Erstelle HttpURLConnection Objekt zur Anfrage一个den服务器
con=(HttpURLConnection)url.openConnection();
con.setRequestMethod(“GET”);
con.setRequestProperty(“用户代理”,DataController.getInstance().getUserAgentString());
如果(DataController.getInstance().getCookie()!=null){
con.setRequestProperty(“Cookie”,DataController.getInstance().getCookie());
}
System.out.println(“保存到长度:+this.saveto”);
System.out.println(“加载字节:“+loadedbytes”);
如果(loadedbytes>0){
//这是一个很好的例子吗?
如果(saveTo!=null&&saveTo.exists()&&saveTo.length()==loadedbytes){//保存到null!!!
//韦德劳夫纳姆职位
con.setRequestProperty(“范围”、“字节数=“+loadedbytes+”-”);
}
如果(!saveTo.exists()),则为else{
//Zieldatei existiert nicht(墨西哥人力资源部)
试一试{
如果(!saveTo.createNewFile()){
//泽尔达蒂·科恩特·尼希特·安杰列格特·沃登
//保存到Objekt zurücksetzen和somit保存对话框provozieren
saveTo=null;
}
}捕获(例外e){
//所有的文件都是不可更改的
e、 printStackTrace();
//保存到Objekt zurücksetzen和somit保存对话框provozieren
saveTo=null;
} 
}
}
con.connect();
//Prüfe响应码
rc=con.getResponseCode();
if(DataController.getInstance().isDebugMode())System.out.println(“rc”+rc);
if(rc==HttpURLConnection.HTTP|u OK | | rc==HttpURLConnection.HTTP|u PARTIAL){
//Wenn keine 206部分内容kam,已加载-Zähler zurücksetzen,下载von vorne beginnen
if(rc==HttpURLConnection.HTTP\u确定){
loadedbytes=0;
}
字符串filename=getFileName();
如果(loadedbytes==0){
size=Long.valueOf(con.getHeaderField(“内容长度”)).longValue();
}否则{
size=loadedbytes+Long.valueOf(con.getHeaderField(“内容长度”)).longValue();
}
//这是一个非常有趣的事件
for(下载ProgressListener l:progressListeners){
l、 设置最小值(0);
l、 设置最大值(大小);
l、 setValue(loadedbytes);
l、 setFilename(文件名);
l、 setStatus(下载ProgressListener.STATUS_RUNNING);
}
//Autosave-Wenn defaultSavePath gesetzt,baue Dateipfad zusammen
如果(saveTo==null&&DataController.getInstance().getSettingsController().getDefaultSavePath()!=null
&&DataController.getInstance().getSettingsController().getUseDefaultSavePath()){
File saveTmp=新文件(DataController.getInstance().getSettingsController().getDefaultSavePath(),文件名);
//普吕菲·奥夫·古尔蒂格凯特,翁·古尔蒂格·伯内曼
if(saveTmp.exists()| | saveTmp.createNewFile()){
saveTo=saveTmp;
//文件名事件auslösen,damit Server den“neuen”Zielpfad mitgeteilt Bekomt
for(下载ProgressListener l:progressListeners){
l、 setFilename(saveTo.getName());
}
}
}
//斯佩切洛特(伊默)没有节日吗?
if(saveTo==null){
//斯皮切恩对话
FileDialog dia=新建FileDialog(ViewController.getFrame(),“另存为”,FileDialog.Save);
直径设置文件(文件名);
直径设置可见(真实);
//System.out.println(“现在:+newdate().getTime());
如果(dia.getFile()==null){
//用户hat Abbrechen gedrückt-下载Abbrechen和aus der Liste entfernen
if(DataController.getInstance().isDebugMode())
System.out.println(“下载取消”);
DataController.getInstance().removeDownload(url);
返回;
}
//设置面板bescheidsagen,dass ein Pfad ausgewählt wurde->DefaultSavePath Haken anzegin
DataController.getInstance().getSettingsController().setLastSavePath(新文件(dia.getDirectory());
saveTo=新文件(dia.getDirectory(),dia.getFile());
if(DataController.getInstance().isDebugMode())
System.out.println(“保存到”+saveTo.getAbsolutePath());
//这是一项宣传活动
for(下载ProgressListener l:progressListeners){
l、 setFilename(saveTo.getName());