import java.io.*; /** * Created by Alan on 2017/1/18. */ public class FileCopy { public static void main(String[] args) throws IOException { File infile=new File("e:"+File.separator+"my.jpg"); File outfile=new File("e:"+File.separator+"这个是Java测试文件夹"+File.separator+"tn.jpg"); if(!infile.exists()){ System.out.println("源文件不存在!"); } if(outfile.exists()){ outfile.delete(); }else{ outfile.createNewFile(); } try{ Thread.sleep(2000); }catch(InterruptedException e){ e.printStackTrace(); } long start=System.currentTimeMillis(); InputStream in=new FileInputStream(infile); OutputStream out=new FileOutputStream(outfile); int t; while((t=in.read())!=-1){ out.write(t); } in.close(); out.close(); long end=System.currentTimeMillis(); System.out.println((end-start)+"ms"); } }
读入一个字节,写出一个字节,能实现复制,但是速度很慢。为了明显看出outfile存在的时候是先删除再复制,所以加了2s时间睡眠。
改进版:
将 字节读入字节数组data中,然后再将字节数组data写出,速度快很多。如果将字节数组换成byte[] data=new byte[1024*1024],速度更快。import java.io.*; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; /** * Created by Alan on 2017/1/18. */ public class FileCopyUpdate { public static void main(String[] args) throws IOException { File infile=new File("e:"+File.separator+"my.jpg"); File outfile=new File("e:"+File.separator+"这个是Java测试文件夹"+File.separator+"tn_update.jpg"); if(!infile.exists()){ System.out.println("源文件不存在!"); } System.out.println("源文件大小:"+new BigDecimal((double)infile.length()/1024/1024).divide(new BigDecimal(1),2,BigDecimal.ROUND_HALF_UP)+"MB"+ "\t"+"上次修改时间:"+new SimpleDateFormat("yy-MM-dd HH:mm:ss").format(new Date(infile.lastModified()))); if(outfile.exists()){ outfile.delete(); }else{ outfile.createNewFile(); } try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } long start=System.currentTimeMillis(); InputStream in=new FileInputStream(infile); OutputStream out=new FileOutputStream(outfile); byte[] data=new byte[1024]; while(in.read(data)!=-1){ out.write(data); } in.close(); out.close(); long end=System.currentTimeMillis(); System.out.println("开始复制的时间:"+new SimpleDateFormat("yy-MM-dd HH:mm:ss:SS").format(new Date(start))); System.out.println("结束复制的时间:"+new SimpleDateFormat("yy-MM-dd HH:mm:ss:SS").format(new Date(end))); System.out.println((end-start)+"ms"); } }下面将一个文件夹里面所有“.java”文件,复制到另一个文件夹,并将后缀改为“.jad”。
顺便打印出了文件上次修改时间,文件大小。import java.io.*; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; /** * Created by Alan on 2017/1/22. */ public class CopyTest { public static void main(String[] args) throws IOException { long start=System.currentTimeMillis(); System.out.println("开始时间:"+new SimpleDateFormat("yy-MM-dd HH:mm:ss:SS").format(new Date(start))); File infile=new File("f:"+File.separator+"Idea_java_workspace"+File.separator+"Practice"+File.separator+"src"); File outfile=new File("e:"+File.separator+"这个是Java测试文件夹"+File.separator+"jad"); if(!(infile.exists() && infile.isDirectory())){ try { throw new Exception("目录不存在"); } catch (Exception e) { e.printStackTrace(); } } if(!(outfile.exists())){ outfile.mkdir(); } File[] files=infile.listFiles(new FilenameFilter(){ @Override public boolean accept(File dir, String name) { return name.endsWith(".java"); } }); String suffix; for(File f:files){ System.out.println(f.getName()+"\t"+"上次修改时间:"+new SimpleDateFormat("yy-MM-dd HH:mm:ss:SS").format(new Date(f.lastModified()))+"\t" +"文件大小:"+new BigDecimal((double)f.length()).divide(new BigDecimal(1),2,BigDecimal.ROUND_HALF_UP)+"B"); InputStream in=new FileInputStream(f); suffix=f.getName().replaceAll(".java",".jad"); OutputStream out=new FileOutputStream(new File(outfile,suffix)); copy(in,out); } long end=System.currentTimeMillis(); System.out.println("结束时间:"+new SimpleDateFormat("yy-MM-dd HH:mm:ss:SS").format(new Date(end))); System.out.println("花费时间:"+(end-start)+"ms"); } public static void copy(InputStream input,OutputStream output) throws IOException { byte[] data=new byte[1024]; while(input.read(data)!=-1){ output.write(data); } input.close(); output.close(); } }
字节流实现文件复制
最新推荐文章于 2022-12-12 01:47:22 发布
本文介绍了一种使用Java进行文件及文件夹复制的方法,通过不同字节数组大小的比较,展示了如何提高复制效率。此外,还提供了一个示例,演示如何将指定文件夹内所有.java文件复制到另一文件夹并更改其扩展名为.jad。


255

被折叠的 条评论
为什么被折叠?



