webentwicklung-frage-antwort-db.com.de

Wie kopiere ich eine Datei von einem Ort an einen anderen Ort?

Ich möchte eine Datei von einem Ort an einen anderen Ort in Java kopieren. 

Folgendes habe ich bisher:

import Java.io.File;
import Java.io.FilenameFilter;
import Java.util.ArrayList;
import Java.util.List;
public class TestArrayList {
    public static void main(String[] args) {
        File f = new File(
            "D:\\CBSE_Demo\\Demo_original\\fscommand\\contentplayer\\config");
        List<String>temp=new ArrayList<String>();
        temp.add(0, "N33");
        temp.add(1, "N1417");
        temp.add(2, "N331");
        File[] matchingFiles = null;
        for(final String temp1: temp){
            matchingFiles = f.listFiles(new FilenameFilter() {
                public boolean accept(File dir, String name) {
                    return name.startsWith(temp1);
                }
            });
            System.out.println("size>>--"+matchingFiles.length);

        }
    }
}

Dies kopiert die Datei nicht. Wie können Sie dies am besten tun?

46
vijayk

Sie können this (oder eine beliebige Variante) verwenden:

Files.copy(src, dst, StandardCopyOption.REPLACE_EXISTING);

Außerdem würde ich empfehlen, File.separator oder / anstelle von \\ zu verwenden, um die Kompatibilität mit mehreren Betriebssystemen zu gewährleisten. Fragen/Antworten zu diesem verfügbaren hier .

Da Sie nicht sicher sind, wie Sie Dateien vorübergehend speichern, schauen Sie sich ArrayList an:

List<File> files = new ArrayList();
files.add(foundFile);

Verschieben einer List von Dateien in ein einzelnes Verzeichnis:

List<File> files = ...;
String path = "C:/destination/";
for(File file : files) {
    Files.copy(file.toPath(),
        (new File(path + file.getName())).toPath(),
        StandardCopyOption.REPLACE_EXISTING);
}
87
Menno

Stream verwenden

private static void copyFileUsingStream(File source, File dest) throws IOException {
    InputStream is = null;
    OutputStream os = null;
    try {
        is = new FileInputStream(source);
        os = new FileOutputStream(dest);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = is.read(buffer)) > 0) {
            os.write(buffer, 0, length);
        }
    } finally {
        is.close();
        os.close();
    }
}

Kanal verwenden

private static void copyFileUsingChannel(File source, File dest) throws IOException {
    FileChannel sourceChannel = null;
    FileChannel destChannel = null;
    try {
        sourceChannel = new FileInputStream(source).getChannel();
        destChannel = new FileOutputStream(dest).getChannel();
        destChannel.transferFrom(sourceChannel, 0, sourceChannel.size());
       }finally{
           sourceChannel.close();
           destChannel.close();
       }
}

Apache Commons IO verwenden lib:

private static void copyFileUsingApacheCommonsIO(File source, File dest) throws IOException {
    FileUtils.copyFile(source, dest);
}

Java SE 7-Dateien verwenden Klasse:

private static void copyFileUsingJava7Files(File source, File dest) throws IOException {
    Files.copy(source.toPath(), dest.toPath());
}

Leistungstest:  

    File source = new File("/Users/pankaj/tmp/source.avi");
    File dest = new File("/Users/pankaj/tmp/dest.avi");


    //copy file conventional way using Stream
    long start = System.nanoTime();
    copyFileUsingStream(source, dest);
    System.out.println("Time taken by Stream Copy = "+(System.nanoTime()-start));

    //copy files using Java.nio FileChannel
    source = new File("/Users/pankaj/tmp/sourceChannel.avi");
    dest = new File("/Users/pankaj/tmp/destChannel.avi");
    start = System.nanoTime();
    copyFileUsingChannel(source, dest);
    System.out.println("Time taken by Channel Copy = "+(System.nanoTime()-start));

    //copy files using Apache commons io
    source = new File("/Users/pankaj/tmp/sourceApache.avi");
    dest = new File("/Users/pankaj/tmp/destApache.avi");
    start = System.nanoTime();
    copyFileUsingApacheCommonsIO(source, dest);
    System.out.println("Time taken by Apache Commons IO Copy = "+(System.nanoTime()-start));

    //using Java 7 Files class
    source = new File("/Users/pankaj/tmp/sourceJava7.avi");
    dest = new File("/Users/pankaj/tmp/destJava7.avi");
    start = System.nanoTime();
    copyFileUsingJava7Files(source, dest);
    System.out.println("Time taken by Java7 Files Copy = "+(System.nanoTime()-start));

ERGEBNISSE:  

/*
 * File copy:
 * Time taken by Stream Copy            = 44582575000
 * Time taken by Channel Copy           = 104138195000
 * Time taken by Apache Commons IO Copy = 108396714000
 * Time taken by Java7 Files Copy       = 89061578000
 */

Verknüpfung:

Verwenden Sie die neuen Java-Dateiklassen in Java> = 7.

Erstellen Sie die untenstehende Methode und importieren Sie die erforderlichen Bibliotheken.

public static void copyFile( File from, File to ) throws IOException {
    Files.copy( from.toPath(), to.toPath() );
} 

Verwenden Sie die erstellte Methode wie folgt in main:

File dirFrom = new File(fileFrom);
File dirTo = new File(fileTo);

try {
        copyFile(dirFrom, dirTo);
} catch (IOException ex) {
        Logger.getLogger(TestJava8.class.getName()).log(Level.SEVERE, null, ex);
}

NB: - fileFrom ist die Datei, die Sie in eine neue Datei fileTo in einem anderen Ordner kopieren möchten.

Credits - @Scott: Standard-Methode, um eine Datei in Java zu kopieren?

6
Amimo Benja
  public static void copyFile(File oldLocation, File newLocation) throws IOException {
        if ( oldLocation.exists( )) {
            BufferedInputStream  reader = new BufferedInputStream( new FileInputStream(oldLocation) );
            BufferedOutputStream  writer = new BufferedOutputStream( new FileOutputStream(newLocation, false));
            try {
                byte[]  buff = new byte[8192];
                int numChars;
                while ( (numChars = reader.read(  buff, 0, buff.length ) ) != -1) {
                    writer.write( buff, 0, numChars );
                }
            } catch( IOException ex ) {
                throw new IOException("IOException when transferring " + oldLocation.getPath() + " to " + newLocation.getPath());
            } finally {
                try {
                    if ( reader != null ){                      
                        writer.close();
                        reader.close();
                    }
                } catch( IOException ex ){
                    Log.e(TAG, "Error closing files when transferring " + oldLocation.getPath() + " to " + newLocation.getPath() ); 
                }
            }
        } else {
            throw new IOException("Old location does not exist when transferring " + oldLocation.getPath() + " to " + newLocation.getPath() );
        }
    }  
5
Quamber Ali

Dateien.existiert ()

Files.createDirectory ()

Files.copy ()

Vorhandene Dateien überschreiben: Files.move () 

Files.delete ()

Files.walkFileTree () Linkbeschreibung hier eingeben

0
Shinwar ismail

Eine Datei von einem Speicherort an einen anderen Speicherort kopieren bedeutet, den gesamten Inhalt an einen anderen Speicherort zu kopieren. Files.copy(Path source, Path target, CopyOption... options) throws IOException Diese Methode erwartet einen Quellspeicherort, der sich aus dem ursprünglichen Dateispeicherort ergibt, und ein Zielspeicherort, bei dem es sich um einen neuen Ordner mit einer gleichartigen Zieldatei handelt (als Original) . Entweder muss der Zielort in unserem System vorhanden sein. Andernfalls müssen Sie einen Ordner erstellen. In diesem Ordner müssen Sie eine Datei mit demselben Namen wie der ursprüngliche Dateiname erstellen. Dann verwenden wir die Kopierfunktion kann eine Datei leicht von einem Ort zum anderen kopieren.

 public static void main(String[] args) throws IOException {
                String destFolderPath = "D:/TestFile/abc";
                String fileName = "pqr.xlsx";
                String sourceFilePath= "D:/TestFile/xyz.xlsx";
                File f = new File(destFolderPath);
                if(f.mkdir()){
                    System.out.println("Directory created!!!!");
                }
                else {
                    System.out.println("Directory Exists!!!!");
                }
                f= new File(destFolderPath,fileName);
                if(f.createNewFile())   {

                    System.out.println("File Created!!!!");
                }   else {
                    System.out.println("File exists!!!!");
                }

                Files.copy(Paths.get(sourceFilePath), Paths.get(destFolderPath, fileName),REPLACE_EXISTING);
                System.out.println("Copy done!!!!!!!!!!!!!!");


            }
0
S.Sarkar