Avatar billede mikmakmuk Nybegynder
17. juni 2007 - 21:47 Der er 6 kommentarer og
1 løsning

synke biblioteker

Hej Eksperter,

Jeg står overfor at skulle løse en opgave hvor jeg skal synke to biblioteker (c:/test --> d:/test). Når jeg trykker på en knap skal alle filer som er nyere i c:/test flyttes til d:/test. Der vil kunne være underbiblioteker. Hvordan kommer jeg i gang med det?
Avatar billede mikkelbm Nybegynder
17. juni 2007 - 23:35 #1
import java.io.*;

public class CopyDir {

    public static void main(String[] argv) throws Exception {
        process("c:\\test", "d:\\test");
    }

    private static void process(String d1, String d2) throws IOException {
        File f = new File(d1);
        if (f.isDirectory()) {
            (new File(d2)).mkdir();
            String list[] = f.list();
            for (int i = 0; i < list.length; i++) {
                process( d1 + File.separator + list[i],
                        d2 + File.separator + list[i]);
            }
        } else if (f.isFile()) {
            copy(d1, d2);
        }
    }
 
    public static void copy(String fromname, String toname) throws IOException {
        InputStream is = new FileInputStream(fromname);
        OutputStream os = new FileOutputStream(toname);
        byte[] b = new byte[100000];
        int n;
        while ((n = is.read(b)) >= 0) {
            os.write(b, 0, n);
        }
        is.close();
        os.close();
    }
}

Fundet lige her på eksperten:

http://www.eksperten.dk/spm/406633
Avatar billede mikkelbm Nybegynder
17. juni 2007 - 23:44 #2
Argh... Jeg fik ikke nærlæst dit spørgsmål, beklager. Jeg så ikke at det kun var filer der er nyere der skal kopieres over.
Avatar billede mikkelbm Nybegynder
17. juni 2007 - 23:50 #3
Men hvis du ændrer lidt i copy-metoden:

public static void copy(String fromname, String toname) throws IOException
{
        File fromFile = new File (fromname);
        File toFile = new File (toname);

        if (toFile.exists() &&
            if (fromFile.lastModified() <= toFile.lastModified()))
                return; // returnér hvis filen er kopieret én gang, men ikke er nyere

        InputStream is = new FileInputStream(fromname);
        OutputStream os = new FileOutputStream(toname);
        byte[] b = new byte[100000];
        int n;
        while ((n = is.read(b)) >= 0) {
            os.write(b, 0, n);
        }
        is.close();
        os.close();
}
Avatar billede mikkelbm Nybegynder
17. juni 2007 - 23:51 #4
Lidt noget vrøvl jeg fik lavet der:

if (toFile.exists() &&
            if (fromFile.lastModified() <= toFile.lastModified()))
                return; // returnér hvis filen er kopieret én gang, men ikke er nyere

Skal selvfølgelig være:

if (toFile.exists() && (fromFile.lastModified() <= toFile.lastModified()))
    return; // returnér hvis filen er kopieret én gang, men ikke er nyere
Avatar billede mikkelbm Nybegynder
20. juni 2007 - 18:54 #5
Brugbart?
Avatar billede mikmakmuk Nybegynder
22. juni 2007 - 11:09 #6
Jepper. Mange tak
Avatar billede mikkelbm Nybegynder
22. juni 2007 - 11:46 #7
Så smider jeg et svar...
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