- 浏览: 223902 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
xiaoxiaowuxian1:
终于找到了,感谢~
大话设计模式(带目录完整版)PDF -
jiaoronggui:
一键安装,很方便
BitNami Redmine Stack -
s21109:
不错 很详细
java文件复制 -
ryanflyer:
白下了半天,无法使用
大话设计模式(带目录完整版)PDF -
xbgd:
sunwang810812 写道根本不能用啊用7z解压试试
大话设计模式(带目录完整版)PDF
java拷贝文件线程
Java复制文件速度最快的算法
第一种方法,是采用普通的IO,Buffered流,速度一般;另一种是采用Channel流的transfer方法,速度超快。建议采用第二种方法。
使用nio和io来测试一个100m的文件
一个简单的方式就是调用cmd命令,使用windows自带的功能来替你完成这个功能
我给你写个例子
package com.zhao_yi.sysutils.classes.copyfile; import java.io.*; import com.zhao_yi.sysutils.SysUtil; import com.zhao_yi.sysutils.classes.StringList; public class CopyFileThread extends Thread { private long CurCopied = 0; private boolean suspendRequested = false; private boolean terminateRequested = false; private StringList SrcFiles = new StringList(); private StringList DstFiles = new StringList(); private CopyFile copyfile = null; private String ErrMsg = ""; public CopyFileThread(CopyFile copyfile) { this.copyfile = copyfile; } public void AddCopyFiles(StringList SrcFiles, StringList DstFiles) { this.SrcFiles.AddStrings(SrcFiles); this.DstFiles.AddStrings(DstFiles); } private boolean CopyOneFile(String SrcFile, String DstFile) { InputStream in = null; OutputStream out = null; try { in = new FileInputStream(SrcFile); out = new FileOutputStream(DstFile); byte[] buf = new byte[1024]; int len = 0; while (!interrupted() && !terminateRequested) { len = in.read(buf); if (len == 0) break; out.write(buf, 0, len); copyfile.OnCopyProcess(len); } } catch (IOException ex) { ErrMsg = "拷贝文件的过程中 出现异常: " + ex.getMessage(); } finally { try { in.close(); out.close(); } catch (IOException ex) { ErrMsg = "拷贝文件的过程中 出现异常: " + ex.getMessage(); } return SysUtil.SameText("", ErrMsg); } } public void run() { try { copyfile.OnCopyBegin(); int fileCount = SrcFiles.getCount(); for (int i = 0; i < fileCount; i++) { CheckSuspended(); if (!interrupted() && !terminateRequested) { String SrcFile = SrcFiles.Get(i); String DstFile = DstFiles.Get(i); if (! (SysUtil.ForceDirectories(SysUtil.ExtractFilePath(DstFile)) && CopyOneFile(SrcFile, DstFile)) ) break; } } } catch (Exception ex) { ErrMsg = ex.getMessage(); } finally { copyfile.OnCopyEnd(ErrMsg); } } public synchronized void RequestSuspend() { suspendRequested = false; } public synchronized void RequestResume() { suspendRequested = false; notify(); } public synchronized void RequestTerminate() { terminateRequested = true; if (suspendRequested) RequestResume(); } public synchronized void CheckSuspended() { while (suspendRequested && !interrupted()) { try { wait(); } catch (InterruptedException ex) { ErrMsg = "暂停的过程中 被强行停止: " + ex.getMessage(); } } } }
Java复制文件速度最快的算法
第一种方法,是采用普通的IO,Buffered流,速度一般;另一种是采用Channel流的transfer方法,速度超快。建议采用第二种方法。
public static long copyFile(File srcFile,File destDir,String newFileName){ long copySizes = 0; if(!srcFile.exists()){ System.out.println("源文件不存在"); copySizes = -1; } else if(!destDir.exists()){ System.out.println("目标目录不存在"); copySizes = -1; } else if(newFileName == null){ System.out.println("文件名为null"); copySizes = -1; } else{ try { BufferedInputStream bin = new BufferedInputStream( new FileInputStream(srcFile)); BufferedOutputStream bout = new BufferedOutputStream( new FileOutputStream(new File(destDir,newFileName))); int b = 0 ,i = 0; long t1 = System.currentTimeMillis(); while((b = bin.read()) != -1){ bout.write(b); i++; } long t2 = System.currentTimeMillis(); bout.flush(); bin.close(); bout.close(); copySizes = i; long t = t2-t1; System.out.println("复制了" + i + "个字节\n" + "时间" + t); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } return copySizes; } public static long copyFile2(File srcFile,File destDir,String newFileName){ long copySizes = 0; if(!srcFile.exists()){ System.out.println("源文件不存在"); copySizes = -1; } else if(!destDir.exists()){ System.out.println("目标目录不存在"); copySizes = -1; } else if(newFileName == null){ System.out.println("文件名为null"); copySizes = -1; } else{ try { FileChannel fcin = new FileInputStream(srcFile).getChannel(); FileChannel fcout = new FileOutputStream( new File(destDir,newFileName)).getChannel(); ByteBuffer buff = ByteBuffer.allocate(1024); int b = 0 ,i = 0; // long t1 = System.currentTimeMillis(); long size = fcin.size(); fcin.transferTo(0,fcin.size(),fcout); //fcout.transferFrom(fcin,0,fcin.size()); //一定要分清哪个文件有数据,那个文件没有数据,数据只能从有数据的流向 //没有数据的文件 // long t2 = System.currentTimeMillis(); fcin.close(); fcout.close(); copySizes = size; // long t = t2-t1; // System.out.println("复制了" + i + "个字节\n" + "时间" + t); // System.out.println("复制了" + size + "个字节\n" + "时间" + t); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } return copySizes; }
使用nio和io来测试一个100m的文件
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class CopyFile { /** * nio拷贝 * @param inFile 源文件 * @param outFile 目标文件 * @return * @throws Exception */ public static long FileChannelCopy(String inFile,String outFile) throws Exception { long begin = System.currentTimeMillis(); File in = new File(inFile); File out = new File(outFile); FileInputStream fin = new FileInputStream(in); FileOutputStream fout = new FileOutputStream(out); FileChannel inc = fin.getChannel(); FileChannel outc = fout.getChannel(); int bufferLen = 2097152; ByteBuffer bb = ByteBuffer.allocateDirect(bufferLen); while (true) { int ret = inc.read(bb); if (ret == -1) { fin.close(); fout.flush(); fout.close(); break; } bb.flip(); outc.write(bb); bb.clear(); } long end = System.currentTimeMillis(); long runtime = 0; if(end > begin) runtime = end - begin; return runtime; } /** * io拷贝 * @param inFile 源文件 * @param outFile 目标文件 * @return * @throws Exception */ public static long FileStraeamCopy(String inFile,String outFile) throws Exception { long begin = System.currentTimeMillis(); File in = new File(inFile); File out = new File(outFile); FileInputStream fin=new FileInputStream(in); FileOutputStream fout=new FileOutputStream(out); int length=2097152;//2m内存 byte[] buffer=new byte[length]; while(true) { int ins=fin.read(buffer); if(ins==-1) { fin.close(); fout.flush(); fout.close(); break; }else fout.write(buffer,0,ins); } long end = System.currentTimeMillis(); long runtime = 0; if(end > begin) runtime = end - begin; return runtime; } static public void main(String args[]) throws Exception { String inFile = "D:\\big4.pdf"; //源文件 String outFile = "D:\\big4copy1.pdf"; //输出文件1 String outFile2 = "D:\\big4copy2.pdf"; //输出文件2 long runtime1,runtime2; runtime1 = FileChannelCopy(inFile,outFile); runtime2 = FileStraeamCopy(inFile,outFile2); System.out.println("FileChannelCopy running time:" + runtime1); System.out.println("FileStraeamCopy running time:" + runtime2); } }
一个简单的方式就是调用cmd命令,使用windows自带的功能来替你完成这个功能
我给你写个例子
import java.io.*; public class test{ public static void main(String[] args){ BufferedReader in = null; try{ // 这里你就当作操作对dos一样好了 不过cmd /c 一定不要动 Process pro = Runtime.getRuntime().exec("cmd /c copy d:\\ReadMe.txt e:\\"); in = new BufferedReader(new InputStreamReader(pro.getInputStream())); String str; while((str = in.readLine()) != null){ System.out.println(str); } }catch(Exception e){ e.printStackTrace(); }finally{ if(in != null){ try{ in.close(); }catch(IOException i){ i.printStackTrace(); } } } } }
发表评论
-
几种任务调度的 Java 实现方法与比较
2013-06-21 22:24 784综观目前的 Web 应用,多数应用都具备任务调度的功能。本文 ... -
Timer与ScheduledExecutorService 的使用和区别
2013-06-21 21:47 1132Timer和ScheduledExecutorService ... -
java调用dll之JNative学习笔记(JNI组件)
2011-08-20 23:15 1074下载地址: JNative_1.4RC2_src.zip : ... -
java使用jchardet检测文本文件(字节流)的编码方式
2011-08-14 23:09 0有时需要InputStreamReader(InputStre ... -
Swing布局入门很好的文章
2011-07-21 13:16 1440本篇介绍AsWing的布局管 ... -
用Java编程实现“网络蜘蛛”
2011-05-15 21:29 1412读取并解析HTML Java同时支持访问URL内容及解 ... -
JNA的使用
2011-05-15 21:09 7553项目地址:http://jna.java.ne ... -
介绍Hyperic-hq产品的基础包sigar.jar
2011-05-15 19:33 2494Hyperic-hq产品的基础包sigar:sigar是Hyp ... -
HTTP服务器返回状态码图解
2011-05-11 13:04 1016以前只是看的枯燥的文字版的服务器返回状态码. 现在,看一张比较 ... -
Java磁盘
2011-04-19 22:37 891import java.io.*; public cla ... -
Java 定时器类 Timer 使用方法
2011-04-17 22:24 1000import java.awt.*; import java ... -
超简单的文件下载器
2011-04-17 22:12 931import java.awt.BorderLayout; ... -
Java 通过 HTTP 下载文件
2011-04-17 22:01 903package core.spider; import ... -
Play框架中的Ajax
2010-11-16 22:42 1236h1. Ajax in the Play framework ... -
监视指定的目录,并有提示信息
2010-09-08 22:15 780监视指定的目录,并有提示信息. 在系统栏目驻留程序,当文件发 ... -
java写出的桌面应用程序如果让图标在系统托盘
2010-09-03 22:01 1132import java.awt.Image; import ... -
Java Service Wrapper工具把Java程序转换为Windows服务
2010-09-03 21:52 2093下载地址:http://sourceforge.net/pro ... -
合并map
2010-06-25 23:13 1954----合并map--------------------- ... -
统计字符串中某子串的出现的次数
2010-05-12 15:15 2186public double getCount(String s ... -
FindZipFileHelper
2010-05-10 14:49 830该方法主要在一个压缩包文件中查找指定的文件
相关推荐
### Java 文件复制技术详解 在Java编程中,文件复制是一项常用且重要的操作。无论是单一文件还是整个文件夹的复制,都是开发过程中常见的需求之一。本文将深入探讨如何使用Java实现文件及其目录结构的完整复制。 #...
java文件复制,使用java语言开发的,效果如windows 的复制和粘贴效果。
Java 文件复制器是一种实用程序,用于在计算机上复制文件。在这个特定的代码示例中,我们看到一个名为 `FileCopy` 的类,该类包含了复制文件的核心逻辑。下面我们将详细探讨这个程序的关键部分以及实现文件复制所...
在Java编程中,文件复制是一项基础且常见的任务,无论是在日常开发还是系统集成中都扮演着重要角色。本文将深入探讨如何使用Java实现文件的复制,包括单个文件的复制和整个文件夹及其子文件的复制。 首先,我们来看...
本文将详细介绍四种常见的Java文件复制方法:使用`FileStreams`、使用`FileChannel`、使用Apache `Commons IO`以及使用Java 7的`Files`类。 #### 1. 使用`FileStreams`复制文件 这种方法是最传统的文件复制手段,...
一个简单的基于java实现的文件复制器,分享给大家学习
"Java 文件复制(带有编码类型)" 在 Java 中,文件复制是非常常见的操作。今天,我们将讨论如何使用 Java 将文件从一个位置复制到另一个位置,并且带有编码类型。 标题:Java 文件复制(带有编码类型) 描述:...
实现文本复制操作的简易JAVA代码,适用于JAVA初学者
这是JAVA SE中的文件复制的代码,很多人对于文件复制不是很理解,希望通过此代码可以帮助更多的人来理解怎么是用Java语言实现文件的复制
Java 文件复制粘贴 Java 文件复制粘贴是指使用 Java 语言实现文件的复制和粘贴操作。在本节中,我们将介绍 Java 文件复制粘贴的实现方法。 文件复制粘贴的重要性 文件复制粘贴是计算机操作系统中的一种基本操作。...
用户输入原始文件地址。。。然后输入要复制到的目录。
在标题和描述中提到的"Java文件复制源代码",主要是指如何使用Java语言来实现文件的拷贝操作。这里我们将深入探讨如何通过Java标准库API来完成文件的复制,并且特别关注使用Swing组件的情况。 首先,我们从最基础的...
### 一、Java文件复制的基本原理 在Java中,复制文件通常涉及到读取源文件的内容,并将其写入到目标文件的过程。这个过程可以通过多种方式实现,包括使用`FileInputStream`和`FileOutputStream`、`Files.copy()`...
在Java编程语言中,文件复制是一项常见的任务,用于在不同位置之间移动或备份数据。本文将详细介绍如何在Java中实现文件复制,同时考虑到输入输出异常处理,并在DOS控制台环境中运行程序。 首先,我们需要创建一个...
在Java编程中,文件复制是一项基础且常见的任务,它涉及到对磁盘上的文件进行读取、写入等操作。下面将详细讲解如何使用Java进行文件复制,以及涉及的相关知识点。 首先,我们需要导入Java的`java.io`包,这个包...
这个名为"File-Operation-by-java.rar"的压缩包包含了一个用Java实现的文件操作示例,它演示了如何进行文件复制、移动、删除以及新建等基本操作。让我们详细探讨一下这些功能的实现。 1. **文件复制**: 文件复制...
实现简单的文件复制功能,适合java入门学习 输入输出部分
在Java编程语言中,文件复制是一项常见的任务,主要通过IO(Input/Output)流来实现。IO流提供了从一个源读取数据并将其写入另一个目的地的机制。在这个主题中,我们将深入探讨如何使用Java的IO流进行文件复制,重点...