Avatar billede babynamnam Nybegynder
19. juni 2002 - 12:03 Der er 14 kommentarer og
1 løsning

kopiere en fil fra en mappe til en anden.

Jeg har en mappe hvori der nogle gange er en billed fil i.
Jeg skal så have lavet et program der kan checke om der er en billed fil i mappen(C://billeder//*.jpg)??, og kopier det til C://billeder2//1.jpg).

 
Avatar billede disky Nybegynder
19. juni 2002 - 12:33 #1
Hejsa

Jeg har denne klasse som kan flytte indholdet fra et dir til et andet.

I scanDir() metoden kan du selv sætte et filter på så den kun tager filer med af en bestemt type.

Den kopierer rekursivt, det vil sige også alle sub directories osv.

Men det skulle være ret nemt at slå det fra.

*
* dirMove.java
*
* Created on 23. november 2000, 11:13
*/

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


/**
*
* @author  reinke
* @version
*/
public class dirMove extends Object
{
    /** 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;
        }
       
        sourceDir=new File(source);
       
        if(!sourceDir.isDirectory())
        {
            error=2;
            return false;
        }

        destDir=new File(dest);
       
        if(destDir.exists())
        {
            error=3;
            return false;
        }

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

        if(dest.endsWith("/"))
        {
            dest=dest.substring(0,dest.length()-1);
        }
   
        //some error has happened
        if(!moveIt(source,dest))
        {
            deleteDirs(dest);
        }
        return true;
    }

    public void deleteDirs(String dest)
    {
        File dFile=new File(dest);

        File files[]=scanDir(dFile);
       
        if(files.length!=0)
        {
            for(int x=0;x<files.length;x++)
            {
                String name=files[x].getName();
               
                if(files[x].isDirectory())
                {
                    deleteDirs(dest+"/"+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.mkdirs())
        {
            error=4;
            return false;
        }
     
        File files[]=scanDir(sFile);
       
        if(files.length!=0)
        {
            for(int x=0;x<files.length;x++)
            {
                String name=files[x].getName();
               
                if(files[x].isDirectory())
                {
                    moveIt(source+"/"+name,dest+"/"+name);
                }
                else
                {
                    if(!copyFile(source+"/"+name,dest+"/"+name))
                    {
                        error=5;
                        return false;
                    }
                }
            }
        }
        return true;
    }
   
    /**
    * @param dir
    * @return  */
    private File [] scanDir(File dir)
    {
        return dir.listFiles();
    }
   
    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)));
           
            int data;
           
            while((data=in.read())!=-1)
            {
                out.write(data);
            }
           
            in.close();
            out.close();
        }
        catch (IOException e)
        {
            return false;
        }
        return true;
    }
   
    /** Returns the error text according to the value of 'error'
    * @return String containing the Error Text according to the value of {@link error}
    */
    public String getError()
    {
        if(error==1) return "source eller dest er tom";
        if(error==2) return "source er ikke en directory";
        if(error==3) return "destination findes allerede!!!";
        if(error==4) return "Could not create Directory";
        if(error==5) return "File copy failed";
        return "";
    }
}
Avatar billede disky Nybegynder
19. juni 2002 - 12:35 #2
rekusionen slår du fra ved at fjerne:

                if(files[x].isDirectory())
                {
                    moveIt(source+"/"+name,dest+"/"+name);
                }
Avatar billede babynamnam Nybegynder
19. juni 2002 - 12:56 #3
hej disky

Findes der virkeligt ikke en kortere/nemmere måde at gøre det på. Er der ikke en simpel kode til at kopiere filer med!?
...jeg havde godt set di class på forhånd, men jeg synes godt nok den er lidt omfattende!
Avatar billede disky Nybegynder
19. juni 2002 - 13:54 #4
så gælder det jo bare om at fjerne det du ikke ønsker med :)
Avatar billede disky Nybegynder
19. juni 2002 - 15:58 #5
her har du den forkortede udgave der kun flytter .jpg filer

Den er lavet til at køre på Windows, ret '\\' til '/' hvis den skal køre på linux

.jpg kan du finde i bunden af filen

/*
*
* dirMove.java
*
* Created on 23. november 2000, 11:13
*/

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("Source = "+source);
        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);
    }

    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+"\\"+name))
                {
                    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)));
           
            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;
        }
    }
}
Avatar billede babynamnam Nybegynder
19. juni 2002 - 22:46 #6
Du er den største disky!!:-)..nu er der bare lige en lille ting inden dine pointene er hjemme...Jeg har en class fil, hvorfra DirMove.class skal hentes/køres..hvordan er det nu lige man gør det!!!??
Avatar billede disky Nybegynder
19. juni 2002 - 23:47 #7
i en anden klasse skriver du:

DirMove move=new DirMove();

move.move("c:\\billeder","c:\\billeder2");

Så skulle alle filer der ender på .jpg blive flyttet fra det første sted til det andet sted.
Avatar billede babynamnam Nybegynder
20. juni 2002 - 00:14 #8
ok det virker!!, men den gør nu ikke helt som jeg ønsker...er det ikke muligt omdøbe de filer der bliver kopieret jeg har prøvet med, move.move("c:\\billeder","c:\\billeder2\\1.jpg"); , men 1.jpg bliver til en mappe. Det jeg gerne vil er at hente et jpg billed fra mappen c:\\billeder og kopiere det til mappen c:\\billeder2\\picture1.jpg. kan det ikke lade sig gøre....bare for at være krævende:-)
Avatar billede disky Nybegynder
20. juni 2002 - 12:26 #9
Så skal du tilføje et rename metode kald i copyFile metoden.

Jeg har ikke tid til at kigge på det lige nu.
Avatar billede babynamnam Nybegynder
20. juni 2002 - 13:15 #10
det er bare iorden...jeg prøver at rode med det!!:-)
Avatar billede disky Nybegynder
20. juni 2002 - 14:47 #11
skal metoden altid kun kopiere en fil ?
Avatar billede babynamnam Nybegynder
20. juni 2002 - 17:26 #12
Ja, den skal checke om der er en .jpg fil i mappen og kopiere den til en anden mappen og omdøbe .jpg filen til 1.jpg.
Avatar billede babynamnam Nybegynder
21. juni 2002 - 12:46 #13
Hey disky...du har ikke et forslag til hvordan jeg får omdøbt den .jpg fil der flyttes i DirMove.class. Sådan at DirMove.class flytter .jpg filen fra mappen c://billeder og til mappen C://billeder2//ny.jpg.
Avatar billede babynamnam Nybegynder
24. juni 2002 - 21:55 #14
Hey disky nu har jeg fået det til at virke med hjælp fra din DirMove.class så her er dine velfortjente point...og tak for hjælpen!
Avatar billede disky Nybegynder
24. juni 2002 - 22:44 #15
det var skam så lidt :-)

Du siger bare til hvis du har problemmer en anden gang.

p.s. undskyld jeg glemte V2 af programmet
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