Come copiare file da una posizione in un’altra posizione?

Voglio copiare un file da una posizione in un’altra posizione in Java.

Ecco cosa ho finora:

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"); Listtemp=new ArrayList(); 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); } } } 

Questo non copia il file, qual è il modo migliore per farlo?

Puoi usare questo (o qualsiasi altra variante):

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

Inoltre, ti consiglio di utilizzare File.separator o / invece di \\ per renderlo conforms su più SO, domanda / risposta su questo disponibile qui .

Dato che non sei sicuro di come memorizzare temporaneamente i file, dai un’occhiata a ArrayList :

 List files = new ArrayList(); files.add(foundFile); 

Per spostare un List di file in una singola directory:

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

Utilizzo di Stream

 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(); } } 

Utilizzando il canale

 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(); } } 

Usando Apache Commons IO lib:

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

Utilizzo della class File di Java SE 7:

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

Test della prestazione:

  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)); 

RISULTATI:

 /* * 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 */ 

link:

http://www.journaldev.com/861/4-ways-to-copy-file-in-java

  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() ); } } 

Utilizzare le classi New Java File in Java> = 7.

Creare il metodo seguente e importare le librerie necessarie.

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

Usa il metodo creato come di seguito all’interno principale:

 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 è il file che si desidera copiare in un nuovo file file in una cartella diversa.

Crediti – @Scott: modo conciso standard per copiare un file in Java?