java - Sletning af filer og derefter sletning af overordnet mappe

Indlæg af Hanne Mølgaard Plasc

Problem



Mit Java Windows-program holder data for et bestemt problem i en fil aProblem.db, der er i en mappe (mappe) med samme navn, f.eks. Dokumenter \ MyApplication \ aProblem \ aProblem.db. Jeg vil gerne have, at brugeren kan slette aProblem uden at forlade ansøgningen. Så filen aProblem.db skal slettes, og hvis aProblem-mappen er tom, skal den også slettes. Fordi FileChooser ikke tillader fil sletning (i hvert fald fra min læsning af dokumentationen) har jeg bygget min egen dialog med en markeringsboks og Ok-knappen og en Cancel-knap. Markeringsfeltet er befolket ved at søge MyApplication for alle mapper x, der indeholder en fil x.db.


Koden nedenfor er sletningsdelen, efter at brugeren har foretaget et valg og klikket OK. Det virker, undtagen når mappen er åben i Windows Stifinder, når en undtagelse kastes, når mappen slettes forsøges. Jeg ved det fordi Explorer har en lås på den, men jeg vil gerne undgå at bede brugeren om at lukke den i Explorer og prøv igen. Er dette muligt?


BEMÆRK: Jeg bruger JFileChooser.APPROVE\_OPTION, men brug IKKE JFileShooser.


           int resp = dialog.showOpenDialog(); 
        if(resp == JFileChooser.APPROVE\_OPTION){
            strConcoursFolderPath = dialog.getSelectedFolderFullPath();
            int response = yesNoDialog("Do you really want to delete " + strConcoursFolderPath + "?");
            if(response == JOptionPane.YES\_OPTION) {
               File dir = new File(strConcoursFolderPath);
               boolean dirExist = dir.exists() && dir.isDirectory();
               if(dirExist) {
                   String strDbFile = dialog.getSelectedFolderName() + ".db";
                   File db = new File(dir + "\" + strDbFile);
                   if(db.exists()) db.delete();
                   File[] listOfFiles = dir.listFiles();
                   if(listOfFiles.length == 0) dir.delete();
               }  
            }

        } else {
            //okDialog("Cancel button clicked");
        }

Bedste reference


Jeg skrev op en pseudokode, som du kan bruge som skabelon.


    File directory = new File(/* current directory you are viewing files in JFileChooser  */);

    if (directory.exists()) {

        //List our content within this directory.
        File[] files = directory.listFiles();

        //Select file to delete.

        //If contents is empty it'll delete the directory.
        if (files.length == 1) {
            directory.delete();
        }
    }


Dette skal gøre det trick baseret på det, du beskrev i posten. Vi kontrollerer, om filindholdet er 1, simpelthen fordi du ved sletning af en fil aldrig har været i et scenario, hvor du sletter en fil & indholdet i mappen er lig med nul. På grund af det kontrollerer vi, om dette er den sidste fil i mappen, og slet derefter mappen ved sletning af den sidste fil.

Andre referencer 1


Svaret 'det skete aldrig rigtigt.' Der var en ikke-relateret fejl, og når det var fast, kunne problemet ikke replikeres. IOW, min kode fungerer fint, om direktøren er åben i Explorer eller ej.


Undskyld


Ed