Avatar billede babynamnam Nybegynder
25. juni 2002 - 11:47 Der er 6 kommentarer og
1 løsning

Sletning af mappe indhold!!

Jeg har et lavet et program hvori jeg på et tidspunkt skal have slettet indholdet i en mappen..og uden at selve mappen slette!
Avatar billede soreno Praktikant
25. juni 2002 - 12:06 #1
følgende eks sletter filer i "c:\\test\\"; + indholdet af subdirectories. directory strukturen vil blive bevaret (dir's slettes ikke):

import java.io.*;
import java.util.*;
import java.util.regex.*;

public class Main
{
    public static void delDirIndhold(File file)
    {
        if(!file.isDirectory())
            return;
           
        String delList[] = file.list();               
        String path = file.getAbsolutePath();
        File fil;
       
        for(int i=0;i<delList.length;i++)
        {
            fil = new File(path + "\\" + delList[i]);
            System.out.println(fil);
            if(fil.isDirectory())
                delDirIndhold(fil);   
            else
                fil.delete();           
        }
    }
   
    public static void main(String args[])
    {
        String path = "c:\\test\\";
        File fil = new File(path);
        delDirIndhold(fil);
    }
}
Avatar billede soreno Praktikant
25. juni 2002 - 12:08 #2
hvis den skal slette subdirs, men ikke det dir der startes fra så brug:
    public static void delDirIndhold(File file)
    {
        if(!file.isDirectory())
            return;
           
        String delList[] = file.list();               
        String path = file.getAbsolutePath();
        File fil;
       
        for(int i=0;i<delList.length;i++)
        {
            fil = new File(path + "\\" + delList[i]);
            System.out.println(fil);
            if(fil.isDirectory())
                delDirIndhold(fil);   
            fil.delete();           
        }
    }
Avatar billede disky Nybegynder
25. juni 2002 - 12:27 #3
Hejsa

Hvis jeg husker rigtigt var det til dig jeg postede min DirMove klasse,

Den sletter de directories den flytter, kig på den source kode, så kan du se hvordan det skal laves.

Hilsen Disky
Avatar billede babynamnam Nybegynder
25. juni 2002 - 22:28 #4
hey disky...da jeg er et fjols til det her java så kan jeg selvfølgelig ikke få det til at virke. Jeg har prøvet at indsætte koden fra din DirMove til min nye DirMove resultatet kan du se herunder:
package picdif;

import java.io.*;
import java.lang.*;
import java.util.*;


/**
*
* @author  reinke
* @version
*/
public class DirMove extends Object implements FileFilter
{
    /** The error code
    */
    private int error=0;

  File sourceDir,destDir;



    public DirMove()
    {
    }

    /** Moves directory from source to dest including everything beneath it
    * @param source The filepath to the source directory
    * @param dest The filepath to the destination
    * @return According to result of the moving of the directory
    */
    public boolean move(String source, String dest)
    {
        //check if either source or dest is empty or null
        if ( (source.trim().length()==0) || (source==null) || (dest.trim().length()==0) || (dest==null) )
        {
            error=1;
            return false;
        }

        System.out.println("Flytter 1 ");
        //System.out.println("Dest  = "+dest);
        sourceDir=new File(source);

        if(!sourceDir.isDirectory())
        {
            error=2;
            return false;
        }

        destDir=new File(dest);

        if(source.endsWith("\\"))
        {
            source=source.substring(0,source.length()-1);
        }

        if(source.endsWith("\\"))
        {
            dest=dest.substring(0,dest.length()-1);


        }

        return moveIt(source,dest);
        deleteDirs(source); ***det er linien her der er skyld i fejlen*****
    }


    public void deleteDirs(String source)

    {
        File dFile=new File(source);

        File files[]=scanDir(dFile);

        if(files.length!=1)
        {
            for(int x=0;x<files.length;x++)
            {
                String name=files[x].getName();

                if(files[x].isDirectory())
                {
                    deleteDirs(source+"/"+name);
                    files[x].delete();
                }
                else
                {
                    files[x].delete();
                }
            }
        }
        else
        {
            dFile.delete();
        }
    }

    private boolean moveIt(String source, String dest)
    {
        File sFile=new File(source);
        File dFile=new File(dest);

        if(!dFile.exists())
        {
            dFile.mkdirs();
        }

        File files[]=scanDir(sFile);

        if(files.length!=0)
        {
            for(int x=0;x<files.length;x++)
            {
                String name=files[x].getName();

              if(!copyFile(source+"\\"+name,dest+"\\"+1))

                {
                    error=5;
                    return false;
                }
            }
        }
        return true;
    }

    /**
    * @param dir
    * @return  */
    private File [] scanDir(File dir)
    {
        return dir.listFiles(this);
    }

    private boolean copyFile(String source, String dest)
    {
        try
        {
//            FileInputStream in=new FileInputStream(new File(source));
//            FileOutputStream out=new FileOutputStream(new File(dest));
            BufferedInputStream in=new BufferedInputStream(new FileInputStream(new File(source)));
            BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream(new File(dest)));
            //BufferedInputStream in1=new BufferedInputStream(new FileInputStream(new File(source))).delete();
            int data;

            while((data=in.read())!=-1)
            {
                out.write(data);
            }

            in.close();
            out.close();
        }
        catch (IOException e)
        {
            return false;
        }
        return true;
    }

    public boolean accept(java.io.File file)
    {
        if(file.getName().toLowerCase().endsWith(".jpg"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}


så jeg fåe fejlene:
"DirMove.java": Error #: 550 : statement not reachable at line 66, column 9
"DirMove.java": Error #: 466 : method does not return a value at line 33, column 5
Avatar billede disky Nybegynder
25. juni 2002 - 22:47 #5
du skriver dette:


        return moveIt(source,dest);
        deleteDirs(source); ***det er linien her der er skyld i fejlen*****


Din deleteDirs() metode bliver aldrig kaldt, fordi return kommandoern står foran, byt rundt på det to så der står:


        deleteDirs(source);
        return moveIt(source,dest);

så skulle det virke
Avatar billede babynamnam Nybegynder
26. juni 2002 - 00:44 #6
hey disky..jeg endte op med at skrive:

if(moveIt(source,dest));
        deleteDirs(source);
        return moveIt(source,dest);

for ellers ville indholdet i mappen blive slettet inden det vil blive kopieret!!
..men her har du de sølle 25 point..og endnu engang tak for hjælpen disky!!!
Avatar billede disky Nybegynder
26. juni 2002 - 07:43 #7
jeg håber ikke du har gjort det nøjagtigt som du skriver.

Det ; som er efter din if sætning skal nok fjernes. :-)

Men okay ellers har du ret, jeg var også lettere smadret så sent :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester