Mercurial > repos > rliterman > csp2
diff CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/fileIO/CopyFile.java @ 68:5028fdace37b
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 16:23:26 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/fileIO/CopyFile.java Tue Mar 18 16:23:26 2025 -0400 @@ -0,0 +1,115 @@ +package fileIO; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Locale; +import java.util.zip.ZipOutputStream; + +import shared.Parse; +import shared.Parser; +import shared.PreParser; +import shared.ReadStats; +import shared.Timer; + + +/** + * Unlike ReadWrite's version, this one forces compression and decompression even with same extensions. + * Mainly for benchmarking. + * @author Brian Bushnell + * @date Jan 23, 2013 + * + */ +public class CopyFile { + + public static void main(String[] args){ + + {//Preparse block for help, config files, and outstream + PreParser pp=new PreParser(args, new Object() { }.getClass().getEnclosingClass(), false); + args=pp.args; + //outstream=pp.outstream; + } + + String in=null, out=null; + boolean overwrite=true; + boolean append=false; + + for(int i=0; i<args.length; i++){ + final String arg=args[i]; + final String[] split=arg.split("="); + String a=split[0].toLowerCase(); + String b=split.length>1 ? split[1] : null; + + if(Parser.parseCommonStatic(arg, a, b)){ + //do nothing + }else if(Parser.parseZip(arg, a, b)){ + //do nothing + }else if(a.equals("in")){ + in=b; + }else if(a.equals("out")){ + out=b; + }else if(a.equals("append") || a.equals("app")){ + append=ReadStats.append=Parse.parseBoolean(b); + }else if(a.equals("overwrite") || a.equals("ow")){ + overwrite=Parse.parseBoolean(b); + }else if(in==null && i==0 && !args[i].contains("=")){ + in=args[i]; + }else if(out==null && i==1 && !args[i].contains("=")){ + out=args[i]; + } + } + assert(in!=null && out!=null); + long bytes=new File(in).length(); + Timer t=new Timer(); + copyFile(in, out, false, overwrite); + t.stop(); + double mbps1=bytes*1000d/t.elapsed; + System.err.println("Time: \t"+t); + System.err.println(String.format(Locale.ROOT, "Speed: \t%.2f MB/s", mbps1)); + } + + + public static synchronized void copyFile(String source, String dest, boolean createPathIfNeeded, boolean overwrite){ + + assert(overwrite || !new File(dest).exists()) : "Destination file already exists: "+dest; + if(createPathIfNeeded){ + File parent=new File(dest).getParentFile(); + if(parent!=null && !parent.exists()){ + parent.mkdirs(); + } + } + + try{ + InputStream in=ReadWrite.getInputStream(source, false, true); + OutputStream out=ReadWrite.getOutputStream(dest, false, false, true); + + final byte[] buffer=new byte[16384]; + int len; + + while((len = in.read(buffer)) > 0){ + out.write(buffer, 0, len); + } + + in.close(); + out.flush(); + if(out.getClass()==ZipOutputStream.class){ + ZipOutputStream zos=(ZipOutputStream)out; + zos.closeEntry(); + zos.finish(); + } + // else if(PROCESS_XZ && out.getClass()==org.tukaani.xz.XZOutputStream.class){ + // org.tukaani.xz.XZOutputStream zos=(org.tukaani.xz.XZOutputStream)out; + // zos.finish(); + // } + out.close(); + + }catch(FileNotFoundException e){ + throw new RuntimeException(e); + }catch(IOException e){ + throw new RuntimeException(e); + } + } + +}