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