nel mio progetto ho usato questo snippet:
Carico il file in un oggetto File e lo passo ad una classe che si occupa della copia.

codice:
public void copyDB() {
    	try{
    		java.io.File file1=new java.io.File("Data/camp.dat");
    	
    		if(file1.exists())
    			new CopyFile(file1).copyDATFile();
    		else{
    			JOptionPane.showMessageDialog(this,"Warning: Impossibile creare copia di backup del file DAT",
					"Test", JOptionPane.ERROR_MESSAGE);
    			
    		}
    	}
    	catch(java.io.IOException ioex){
    		System.err.println("Warning: Errore nella copia di backup del DBFile");
    		logger.error(ioex.getMessage());
    		ioex.printStackTrace();
    	}
    	
    }
Classe:
Salvo l'oggetto File facendo al copia e richiamo il metodo:
L'oggetto FileChannel come puoi leggere dal javadoc:
"A channel for reading, writing, mapping, and manipulating a file"
Un oggetto per manipolare un file

Poi da qui in poi dovresti tovare un tuo modo per trasferire.
A me serviva solo fare una copia (nomefile-copia.dat) sulla stessa directory.
Per questo ho preso il file senza estensione, gli ho appeso "-copia.dat" e l'ho salvato.

Il passaggio è facile nel tuo FileChannel dest potrai scrivere
FileChannel dest = new FileOutputStream(path+"inputFile.txt").getChannel();


codice:
    public class CopyFile {
    
    	private File sfile;
        public CopyFile(File sfile)  {
        	this.sfile=sfile;
        }
        
       
    	
    	public void copyDATFile() throws IOException{
    		FileChannel source = new FileInputStream(sfile).getChannel();
        	String tmp=sfile.getAbsolutePath().substring(0,sfile.getAbsolutePath().length()-4);
    		FileChannel dest = new FileOutputStream(tmp+"-copia.dat").getChannel();
    		source.transferTo(0, source.size(), dest);
    		source.close();
    		dest.close();
        }
    }
Ciao.