2 votes

Comment puis-je inciter l'application à continuer après la levée d'une exception ?

Je travaille sur une application qui doit déplacer des fichiers et mettre à jour certaines données dans la base de données. Si le fichier n'est pas trouvé, une exception sera lancée. Mais après cette exception, l'application s'interrompt et arrête de déplacer les fichiers. Comment puis-je modifier mon code pour que mon application puisse continuer après l'exception.

Il affichera simplement que le fichier n'existe pas, puis il continuera à déplacer le fichier suivant.

Voici mon code :

import java.sql.*;      
import java.nio.file.*;
import java.io.*;

public class SortMainNewFinal {
  public static void main(String[] args) throws IOException, FileNotSynchronizedException {

  //some not relevant code
  //...

  //the relevant code

    if(path.contains(timestamp)) { 
      if(filecheck(path,filename)) { 
      data.writeToFile("The File " + filename + " is already in its subordinated folder.");
      }
    }else {
       checkDir(path+timestamp,filename); 
       filemove(path,timestamp,filename); 
       data.writeToFile("File "+filename+" has been moved into " + path + timestamp + "/" + 
                        filename);

       String strUpdate = ("update cm_documents set document_path=\""+path+timestamp+"/"
                            +filename + "\" where document_name=\""+filename+"\"");
       data.writeToFile("SQL Statement is: " + strUpdate); 
       update.executeUpdate(strUpdate); 
    }
      //Catch SQLException
  }

  private static void filemove(String path, String timestamp, String filename) 
  throws IOException, FileNotSynchronizedException{
        try {
          Files.move(Paths.get(path+filename), Paths.get(path+timestamp+"/"+filename));
        }catch(NoSuchFileException e) {
          String error= "ERROR: The file " + filename + " has been moved, renamed or deleted and 
                         these changes are not synchronized with the database.";

          String file_name="C:/database/logfile.log";
          WriteFile data = new WriteFile(file_name,true);

          data.writeToFile(error); 
          throw new FileNotSynchronizedException(filename); 
        }
 }
} 
class FileNotSynchronizedException extends Exception{

  FileNotSynchronizedException(String filename) throws IOException{
    super("The file" + filename + "has been moved, renamed or deleted and these changes are not 
           synchronized with the database.");

 }
}

Mon problème est que l'application lance mon exception et s'interrompt ensuite, mais je veux que l'application imprime l'exception et qu'elle continue en haut de l'application avec la déclaration if, etc.

Je tiens à préciser que je ne suis pas de langue maternelle anglaise, donc veuillez excuser toute erreur, et que je suis assez novice en matière de codage, donc veuillez excuser toute erreur dans mon code. ( :

1voto

Fidan Bicaj Points 94

Supprimez les jets IOException, FileNotSynchronizedException de votre méthode principale, car c'est là que vous voulez gérer l'exception et non la lancer. Si vous laissez votre bloc catch vide, cela n'arrêtera pas l'exécution du programme :

    try {
        filemove(path,timestamp,filename);
    }catch ( Exception e){
        System.out.println("Some exception occurred ->  "+e.getMessage());
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X