Avatar billede frostware Nybegynder
10. januar 2005 - 19:33 Der er 14 kommentarer og
1 løsning

kopier filer i java

Hej

Mit problem går ud på at jeg gerne vil kopiere nogle filer med java. Lade os sige at jeg har "c:\1.txt" som jeg gerne vil kopiere til denne sti "d:\kopi.txt"

Filen skrifter altså sti og filnavn.

Er der desuden nogle parametre man kan sætte på så den automatisk overskriver. Sammenligner ændret tiderne osv.

Håber en ekspert kan hjælpe mig :-)
Avatar billede arne_v Ekspert
10. januar 2005 - 19:36 #1
simpel copy:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class CopyFile {
    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);       
        }
    }
    public static void main(String[] args) throws Exception {
        copy("C:\\test.exe", "C:\\temp\\test.exe");
    }
}
Avatar billede arne_v Ekspert
10. januar 2005 - 19:36 #2
xcopy (altså rekursivt copy af dir):

import java.io.*;

public class CopyDir {

  public static void main(String[] argv) throws Exception {
      process("C:\\ZZZ", "C:\\ZZZCOPY");
  }

  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();
  }
}
Avatar billede kalp Novice
10. januar 2005 - 19:37 #3
hehe arne arne arne jeg fik ikke engang en mail fra katogorien så havde du svaret;o)
Avatar billede arne_v Ekspert
10. januar 2005 - 19:37 #4
copy med progress bar:

import java.awt.*;
import java.io.*;

import javax.swing.*;

public class CopyProgressThread extends JFrame {
    public JProgressBar pbar;
    public CopyProgress() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BorderLayout());
        pbar = new JProgressBar();
        getContentPane().add(pbar, BorderLayout.CENTER);
        pack();
    }
    public static void main(String[] args) {
        CopyProgress cp = new CopyProgress();
        cp.show();
        CopyThread cpthread = new CopyThread("C:\\z.1", "C:\\z.2", cp.pbar);
        cpthread.start();
    }
}

class CopyThread extends Thread {
    private String from;
    private String to;
    private JProgressBar  pbar;
    public CopyThread(String from, String to, JProgressBar pbar) {
        this.from = from;
        this.to = to;
        this.pbar = pbar;
    }
    public void run() {
        pbar.setMaximum((int)(new File(from)).length());
        pbar.setValue(0);
        pbar.setStringPainted(true);
        try {
            InputStream is = new FileInputStream(from);
            OutputStream os = new FileOutputStream(to);
            int total = 0;
            byte[] b = new byte[1000];
            int n;
            while((n = is.read(b)) >= 0) {
                os.write(b, 0, n);
                total += n;
                pbar.setValue(total);
            }
            is.close();

            os.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Avatar billede arne_v Ekspert
10. januar 2005 - 19:38 #5
Alle disse eksempler overskriver.
Avatar billede arne_v Ekspert
10. januar 2005 - 19:39 #6
Du kan hente lats modfied for en fil med:

(new File(filename)).lastModified()
Avatar billede arne_v Ekspert
10. januar 2005 - 19:40 #7
kalp>

eksemplerne var nogle jeg havde på lager
Avatar billede kalp Novice
10. januar 2005 - 19:41 #8
arne_v>> ja men du skulle vel stadig ind og finde dem:) men det okay hehe:)
Avatar billede frostware Nybegynder
10. januar 2005 - 19:52 #9
det ser godt ud...og det gik meget hurtigt, tak for det. Jeg kigger på med det samme
Avatar billede frostware Nybegynder
10. januar 2005 - 19:58 #10
Kort spørgsmål til det sidste eksempel med progress baren. Jeg får fejl ved CopyProgress() , i 6.linie. Skal man gøre noget ekstra.

Indtil videre har jeg bare kopieret det for at se hvordan det virker
Avatar billede arne_v Ekspert
10. januar 2005 - 20:02 #11
Klassen skal hedde:

public class CopyProgress extends JFrame {
Avatar billede arne_v Ekspert
10. januar 2005 - 20:03 #12
(Jeg har rettet navnet men ikke fået det gjordt konsekvent)
Avatar billede arne_v Ekspert
10. januar 2005 - 20:04 #13
Og med en nyere java bør

cp.show();

også erstattes med

cp.setVisible(true);
Avatar billede frostware Nybegynder
15. oktober 2007 - 09:44 #14
Arne_v smid et svar.
Avatar billede arne_v Ekspert
15. oktober 2007 - 15:08 #15
OK
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