2013-05-15 1 views
0

J'utilise le code suivant pour faire en sorte que le contenu du fichier sont écrites sur le disque avec succèsobtenir Connexion réinitialisée par exception par les pairs (TopLink)

public void copyFileFromUrl(URL source, File target, int count) throws IOException { 

    InputStream in = null; 
    OutputStream out = null;  
    if (target != null) { 
     try { 
      if (!target.exists()) { 
       target.createNewFile(); 
       if (source == null) { 
        return; 
       } else {  
        in = source.openStream(); 
       } 
       out = new FileOutputStream(target); 
       byte[] buf = new byte[1024]; 
       int len; 
       while ((len = in.read(buf)) > 0) { 
        out.write(buf, 0, len); 
       }    
       log.debug("The contents from the URL: " + source + " are successfully written to the file " + target);    
       //add for successfull 
      } else { 
       log.debug("skipping creation of asset"); 
      } 
     } catch (Exception e) { 
      if(count < 3){ 
       if (in != null) { 
        in.close(); 
       } 
       if (out != null) { 
        out.close(); 
       } 

       // Attempt to delete it 
       boolean success = target.delete(); 
       if (!success) { 
        log.debug("Unable to delete " + target);  
       } else {  
        copyFileFromUrl(source, target, ++count); 
       }  
      } else {  
       log.debug(e.getClass().getName()); 
       e.printStackTrace();    
      }  
     } finally { 
      if (in != null) { 
       in.close(); 
      } 
      if (out != null) { 
       out.close(); 
      }  
     } 
    } 
} 

J'appelle ce code comme celui-ci

while(iter.hasNext()) { 
    CourseMaterials cm = iter.next();  
    String url; 
    try { 
     Asset asset = cm.getAsset(); 
     List<AssetVersion> av = asset.getAssetVersions(); 

    } catch (Exception e1) { 
     log.debug("Bad asset so skipping..."); 
     e1.printStackTrace(); 
     continue; 
    } 

    .... 

    try { 
     URL earl = new URL(visualElementURL); 
     scormFileWriter.copyFileFromUrl(earl, new File(absoluteFileName), 0); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 
} 

Maintenant, comment j'essaie est comme, Quand je viens de fonctionner copyFileFromUrl(), je débranche le câble, il essaie deux fois, puis la troisième fois je branche le câble. La fonction retourne avec succès. Comme je suis en boucle. Maintenant après cela quand je viens à la ligne

Asset asset = cm.getAsset(); 

Je reçois Connection Reset by peer exception. Il ignore cet actif et recommence normalement. Pourquoi ? Pourquoi je reçois connection Reset by peer exception? Si je reçois cette exception à cause du débranchement du câble alors je devrais l'obtenir pour tous les autres actifs aussi, mais je reçois cette exception seulement pour l'itération suivante, alors il commence à bien fonctionner, je veux dire alors la ligne Asset asset = cm.getAsset(); ne jette aucune exception après le lancement première fois?

Pourquoi cela se produit-il? Comment puis-je le surmonter? J'utilise SQL Server 2008 pour la base de données.

Merci

Répondre

0

Vous pouvez essayer d'utiliser la méthode flush() avant la méthode close()

Questions connexes