JAVA多线程复制文件(转)

合集下载

java实现文件的复制和删除

java实现文件的复制和删除

package myCopyDirectory;import java.io.*;import java.nio.channels.FileChannel;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Scanner;public class CopyDirectory {static int numFileDir = 0;static int numFile = 0;static long sizeDir = 0;public void initNum(){numFileDir = 0;numFile = 0;sizeDir = 0;}public void getInfoOfCopyFile(String path){File file = new File(path);if (file.exists()){SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date;if (file.isDirectory()){File[] listFile = file.listFiles();for(int i=0;i<listFile.length;i++){date = new Date(listFile[i].lastModified());System.out.print(fmt.format(date) + " ");if(listFile[i].isDirectory()){System.out.print("文件夹");System.out.println(listFile[i].toString());numFileDir++;getInfoOfCopyFile(listFile[i].toString());}else{System.out.print("文件");System.out.println(listFile[i].toString() + "(大小:" + listFile[i].length() + " Byte)");numFile++;sizeDir += listFile[i].length();}}}else{date=new Date(stModified());System.out.print(fmt.format(date)+" ");System.out.print("文件");System.out.println(file.toString() + "(大小:"+file.length() + " Byte)");numFile++;sizeDir += file.length();}}else{System.out.println("文件或文件夹不存在!");}}public void copyFiles(String sourcePath,String desPath) throws Exception{File fromFile = new File(sourcePath);if(fromFile.exists()){File desFile = new File(desPath);if(desFile.exists()){System.out.println("目录" + desPath + "目录已经存在,复制文件操作失败!");}else{if(fromFile.isFile()){File newDesFile = new File(desPath);newDesFile.createNewFile();FileInputStream inFile = new FileInputStream(fromFile);FileOutputStream outFile = new FileOutputStream(newDesFile);FileChannel inChannel = inFile.getChannel();FileChannel outChannel = outFile.getChannel();long bytesWritten = 0;long byteCount = inChannel.size();while(bytesWritten<byteCount){bytesWritten += inChannel.transferTo(bytesWritten, byteCount - bytesWritten, outChannel);}// System.out.println("文件" + fromFile.getName() + "已经成功复制到" + newDesFile.getAbsolutePath() + ".");inFile.close();outFile.close();}else{if(desFile.mkdir()){// System.out.println("目录" + desFile.getAbsolutePath() + "创建成功!");File [] info = fromFile.listFiles();for(int i=0;i<info.length;i++){String desPathTemp = desPath+"\\"+info[i].getName();copyFiles(info[i].getAbsolutePath(),desPathTemp);}}else{System.out.println("目录" + desFile.getAbsolutePath() + "创建失败!");}}}}else{System.out.println("目录" + sourcePath + "不存在,文件复制操作失败!");}}public void deleteFile (String sourcePath) throws Exception{File deleFile = new File(sourcePath);if(!deleFile.exists()){System.out.println("路径不正确.");}else {String fileName[] = deleFile.list();for (int i=0;i<fileName.length;i++){File f1 = new File(sourcePath,fileName[i]);if (f1.isFile() || f1.length()==0){f1.delete();}else if (f1.isDirectory()){// deleteFile(f1.getAbsolutePath());deleteFile(f1.getAbsolutePath());}deleFile.delete();}}}public void meun(CopyDirectory copy) throws InterruptedException,IOException,Exception {int readSelect;int choice = 1;String str;String sourcePath = null;String desPath = null;Scanner read = new Scanner(System.in);BufferedReader input = new BufferedReader(new InputStreamReader(System.in));System.out.println("欢迎使用文件删除和文件复制系统");while (choice != 0) {System.out.println("请选择您所需要的功能:");System.out.println("1 文件删除");System.out.println("2 文件复制");System.out.print("请选择:");readSelect = read.nextInt();switch(readSelect){case 1:{System.out.println("请输入目录:");sourcePath = input.readLine();System.out.println("源目录的信息如下:");System.out.println("最后修改时间属性名称");copy.getInfoOfCopyFile(sourcePath);System.out.println();System.out.println("共有" + CopyDirectory.numFileDir + "个文件夹," + CopyDirectory.numFile + "文件,总大小为" + CopyDirectory.sizeDir + "Byte。

java实现文件和文件夹复制

java实现文件和文件夹复制
rightCopy = false;
return rightCopy;
}
/** * 递归复制文件夹,因为文件夹下不止一个文件,里面可能有文件或文件夹, * 因此需要调用递归方法
* @param startFolder = 需要复制的文件夹 * @param desFolder = 复制目的地的文件夹 * @return = true 表示成功,false 表示失败 */
if(desFilePath.startsWith(startFilePath)){ System.out.println("error copy"); return false;
}else
copyFinished = this.copyFolder(startFile, desFile);
}
return copyFinished; }
this.startFilePath = startFilePath; this.desFilePath = desFilePath;
// 判断是否返回成功的变量 boolean copyFinished = false;
File startFile = new File(startFilePath); File desFile = new File(desFilePath);
// 递归的调用此函数,确保函数都被复制完全
boolean rightCopy = recursionCopy(thisFile, new
File(desContentFilePath));
if(!rightCopy) return false;
}
} return true; }
/**
* 此函数是为了得到目的文件夹的地址,

javafileset 用法

javafileset 用法

一、简介Javafileset 是一个用于收集文件的工具类,它可以帮助开发者方便地进行文件的遍历和操作。

其主要功能包括文件的过滤、遍历、复制等。

在实际开发中,Javafileset 的灵活性和功能性使得它成为了许多项目中不可或缺的工具。

二、基本用法1. 添加依赖在项目的配置文件中加入 Javafileset 的依赖,以便在项目中使用该工具类。

2. 创建 Javafileset 对象通过构造函数或者静态方法创建 Javafileset 对象,以便对文件进行操作。

3. 文件过滤使用 Javafileset 提供的方法对文件进行过滤,包括按照文件名、后缀名、大小等进行筛选。

4. 文件遍历调用 Javafileset 的遍历方法,对符合条件的文件进行遍历操作,可以对文件进行读取、写入、删除等操作。

5. 文件复制利用 Javafileset 提供的复制方法,可以方便地进行文件的复制操作,支持单个文件、文件夹的复制。

还可以指定目标文件夹、文件名等参数。

三、高级用法1. 多线程操作Javafileset 支持多线程处理文件,可以加快文件操作的速度,提高效率。

2. 文件压缩通过 Javafileset 提供的压缩方法,可以对文件进行压缩操作,支持多种压缩格式。

3. 文件对比Javafileset 提供了文件对比的方法,可以方便地比较文件的内容、大小等信息,帮助开发者找出文件的差异。

4. 文件权限管理Javafileset 支持对文件权限进行管理,包括读、写、执行等权限的设置和修改。

四、注意事项1. 异常处理在使用 Javafileset 进行文件操作时,要对可能出现的异常进行处理,确保程序的稳定性。

2. 资源释放在文件操作完成后,要及时释放资源,包括关闭文件流等。

3. 文件路径注意文件路径的格式,避免因为路径错误导致文件操作失败。

五、结语Javafileset 是一个强大的文件操作工具类,它简化了文件操作的复杂性,提高了开发效率。

4种java文件复制的方法

4种java文件复制的方法

4种java文件复制的方法在Java中,复制文件有多种方法,这里提供四种常见的方法:1. 使用``包中的`Files`类这是Java 7及以后版本中推荐的方法,因为它使用了异步I/O操作,性能更好。

```javaimport ;public class FileCopy {public static void main(String[] args) {Path source = ("");Path target = ("");try {(source, target, _EXISTING);} catch (IOException e) {();}}}```2. 使用``包中的`FileInputStream`和`FileOutputStream`这是较旧的方法,适用于较小的文件。

对于大文件,这种方法可能效率较低,因为它一次读取整个文件。

```javaimport ;public class FileCopy {public static void main(String[] args) {File source = new File("");File target = new File("");try (FileInputStream fis = new FileInputStream(source);FileOutputStream fos = new FileOutputStream(target)) {byte[] buffer = new byte[1024];int length;while ((length = (buffer)) > 0) {(buffer, 0, length);}} catch (IOException e) {();}}}```3. 使用``包中的`FileChannel`这也是一种效率较高的方法,适用于大文件。

java中copy的用法

java中copy的用法

Java中copy的用法在Java中,copy是一种常见的操作,用于将数据从一个位置复制到另一个位置。

它可以用于复制对象、数组、集合等不同类型的数据。

本文将全面介绍Java中copy的用法,并提供一些示例代码来帮助读者更好地理解。

1. 复制对象在Java中,要复制一个对象,可以使用两种方式:浅拷贝和深拷贝。

1.1 浅拷贝浅拷贝是指将对象的字段值复制到新对象中,但是如果字段是引用类型,那么只会复制引用而不会复制引用指向的对象。

这意味着新旧对象将共享同一个引用对象。

Java提供了Object类中的clone()方法来实现浅拷贝。

要使用该方法,需要实现Cloneable接口并重写clone()方法。

以下是一个示例代码:class Person implements Cloneable {private String name;private int age;// 构造方法和其他方法省略@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();}}public class Main {public static void main(String[] args) throws CloneNotSupportedException { Person person1 = new Person("Alice", 20);Person person2 = (Person) person1.clone();System.out.println(person1); // 输出:Person@hashcodeSystem.out.println(person2); // 输出:Person@hashcode}}在上面的代码中,Person类实现了Cloneable接口,并重写了clone()方法。

java fileutils copy使用

java fileutils copy使用

一、介绍java fileutils copy的作用在Java编程语言中,FileUtils类是Apache Commons IO库提供的一个实用工具类,它包含了许多对文件和目录进行操作的方法。

其中,copy方法是FileUtils类中最常用的方法之一,它用于将源文件或目录复制到目标位置。

二、java fileutils copy的具体用法FileUtils类中的copy方法有多种重载形式,可以用来复制文件、目录及其内容到目标位置,同时还可以指定是否覆盖已存在的目标文件或目录。

1. 复制文件调用FileUtils类的copyFile方法可以将单个文件复制到目标位置,示例代码如下:```FileUtils.copyFile(new File("sourceFile.txt"), newFile("targetFile.txt"));```上述代码将源文件sourceFile.txt复制到目标文件targetFile.txt中。

2. 复制目录若要复制整个目录及其内容到目标位置,可以使用copyDirectory方法,示例如下:FileUtils.copyDirectory(new File("sourceDir"), newFile("targetDir"));```上述代码将源目录sourceDir中的所有文件和子目录复制到目标目录targetDir中。

3. 覆盖已存在的文件或目录在默认情况下,如果目标文件或目录已经存在,调用copy方法会抛出FileExistsException异常。

但可以通过设置FileUtils类的静态属性来让copy方法覆盖已存在的目标位置,示例如下:```FileUtils.forceMkdir(new File("targetDir"));FileUtils.copyDirectory(new File("sourceDir"), newFile("targetDir"), true);```上述代码中,forceMkdir方法用来确保目标目录存在,然后调用copyDirectory方法将源目录sourceDir中的所有内容复制到目标目录targetDir中,如果目标目录已存在则覆盖。

java中复制文件或文件夹实现

Java中实现复制文件或文件夹拷贝一个文件的算法比较简单,当然,可以对它进行优化,比如使用缓冲流,提高读写数据的效率等。

但是在复制文件夹时,则需要利用Flie类在目标文件夹中创建相应的目录,并且使用递归方法。

import java.io.*;/*** 复制文件夹或文件夹*/public class CopyDirectory {// 源文件夹static String url1 = "f:/photos";// 目标文件夹static String url2 = "d:/tempPhotos";public static void main(String args[]) throws IOException {// 创建目标文件夹(new File(url2)).mkdirs();// 获取源文件夹当前下的文件或目录File[] file = (new File(url1)).listFiles();for (int i = 0; i < file.length; i++) {if (file[i].isFile()) {// 复制文件copyFile(file[i],new File(url2+file[i].getName()));}if (file[i].isDirectory()) {// 复制目录String sourceDir=url1+File.separator+file[i].getName();String targetDir=url2+File.separator+file[i].getName();copyDirectiory(sourceDir, targetDir);}}}// 复制文件public static void copyFile(File sourceFile,File targetFile)throws IOException{// 新建文件输入流并对它进行缓冲FileInputStream input = new FileInputStream(sourceFile);BufferedInputStream inBuff=new BufferedInputStream(input);// 新建文件输出流并对它进行缓冲FileOutputStream output = new FileOutputStream(targetFile);BufferedOutputStream outBuff=new BufferedOutputStream(output);// 缓冲数组byte[] b = new byte[1024 * 5];int len;while ((len =inBuff.read(b)) != -1) {outBuff.write(b, 0, len);}// 刷新此缓冲的输出流outBuff.flush();//关闭流inBuff.close();outBuff.close();output.close();input.close();}// 复制文件夹public static void copyDirectiory(String sourceDir, String targetDir)throws IOException {// 新建目标目录(new File(targetDir)).mkdirs();// 获取源文件夹当前下的文件或目录File[] file = (new File(sourceDir)).listFiles();for (int i = 0; i < file.length; i++) {if (file[i].isFile()) {// 源文件File sourceFile=file[i];// 目标文件File targetFile=newFile(new File(targetDir).getAbsolutePath()+File.separator+file[i].getName());copyFile(sourceFile,targetFile);}if (file[i].isDirectory()) {// 准备复制的源文件夹String dir1=sourceDir + "/" + file[i].getName();// 准备复制的目标文件夹String dir2=targetDir + "/"+ file[i].getName();copyDirectiory(dir1, dir2);}}} }。

Java复制(拷贝)数组的4种方...

Java复制(拷贝)数组的4种⽅...所谓复制数组,是指将⼀个数组中的元素在另⼀个数组中进⾏复制。

本⽂主要介绍关于 Java ⾥⾯的数组复制(拷贝)的⼏种⽅式和⽤法。

在 Java 中实现数组复制分别有以下 4 种⽅法:Arrays 类的 copyOf() ⽅法Arrays 类的 copyOfRange() ⽅法System 类的 arraycopy() ⽅法Object 类的 clone() ⽅法下⾯来详细介绍这 4 种⽅法的使⽤。

使⽤ copyOf() ⽅法和 copyOfRange() ⽅法Arrays 类的 copyOf() ⽅法与 copyOfRange() ⽅法都可实现对数组的复制。

copyOf() ⽅法是复制数组⾄指定长度,copyOfRange() ⽅法则将指定数组的指定长度复制到⼀个新数组中。

1. 使⽤ copyOf() ⽅法对数组进⾏复制Arrays 类的 copyOf() ⽅法的语法格式如下:Arrays.copyOf(dataType[] srcArray,int length);其中,srcArray 表⽰要进⾏复制的数组,length 表⽰复制后的新数组的长度。

使⽤这种⽅法复制数组时,默认从原数组的第⼀个元素(索引值为 0)开始复制,⽬标数组的长度将为 length。

如果 length ⼤于 srcArray.length,则⽬标数组中采⽤默认值填充;如果 length ⼩于 srcArray.length,则复制到第 length 个元素(索引值为 length-1)即⽌。

注意:⽬标数组如果已经存在,将会被重构。

例 1假设有⼀个数组中保存了 5 个成绩,现在需要在⼀个新数组中保存这 5 个成绩,同时留 3 个空余的元素供后期开发使⽤。

使⽤ Arrays 类的 CopyOf() ⽅法完成数组复制的代码如下:import java.util.Arrays;public class Test19{public static void main(String[] args) {// 定义长度为 5 的数组int scores[] = new int[]{57,81,68,75,91};// 输出原数组System.out.println("原数组内容如下:");// 循环遍历原数组for(int i=0;i<scores.length;i++) {// 将数组元素输出System.out.print(scores[i]+"\t");}// 定义⼀个新的数组,将 scores 数组中的 5 个元素复制过来// 同时留 3 个内存空间供以后开发使⽤int[] newScores = (int[])Arrays.copyOf(scores,8);System.out.println("\n复制的新数组内容如下:");// 循环遍历复制后的新数组for(int j=0;j<newScores.length;j++) {// 将新数组的元素输出System.out.print(newScores[j]+"\t");}}}在上述代码中,由于原数组 scores 的长度为 5,⽽要复制的新数组 newScores 的长度为 8,因此在将原数组中的 5 个元素复制完之后,会采⽤默认值填充剩余 3 个元素的内容。

java中复制对象的方法

java中复制对象的方法(原创版3篇)《java中复制对象的方法》篇1在Java 中,有两种常见的复制对象的方法:浅拷贝和深拷贝。

1. 浅拷贝浅拷贝是指复制对象时,只复制对象本身所占用的内存空间,而不会复制对象内部的引用类型。

如果对象内部包含引用类型,那么浅拷贝后的新对象和原对象共享同一个引用类型,当引用类型发生变化时,会影响到浅拷贝后的新对象。

Java 中,通过复制构造函数实现浅拷贝。

示例如下:```javapublic class Person {private String name;private int age;private Address address;public Person(String name, int age, Address address) { = name;this.age = age;this.address = address;}public static void main(String[] args) {Person original = new Person("Alice", 20, new Address("北京"));Person copy = new Person(original);System.out.println("Original address: " + original.address.getCity());System.out.println("Copy address: " + copy.address.getCity());original.address = new Address("上海");System.out.println("Updated original address: " +original.address.getCity());System.out.println("Copy address: " + copy.address.getCity());}}class Address {private String city;public Address(String city) {this.city = city;}public String getCity() {return this.city;}}```输出结果为:```Original address: 北京Copy address: 北京Updated original address: 上海Copy address: 北京```可以看出,浅拷贝后的新对象和原对象共享同一个地址引用,当原对象的地址发生变化时,浅拷贝后的新对象的地址也会随之变化。

java file copy方法

java file copy方法Java中文件操作是非常常见的,而文件复制是其中的一个重要的操作。

本文将介绍在Java中文件复制的实现。

1. 确定文件路径在进行文件复制操作之前,首要的一步便是要确定文件路径,即源文件和目标文件的路径。

在Java中使用java.io.File类来获取文件路径,具体代码如下:```javaFile sourceFile = new File("sourceFilePath");File targetFile = new File("targetFilePath");```sourceFilePath是源文件的路径,targetFilePath是目标文件的路径。

2. 检查文件是否存在在进行文件复制操作之前,需要确保源文件存在且可读,目标文件不存在或者可以覆盖。

在进行文件复制之前需要进行文件状态的检查。

具体代码如下:```javaif (!sourceFile.exists()) {System.out.println("源文件不存在");return;}if (!sourceFile.isFile()) {System.out.println("源文件不是一个文件");return;}if (!sourceFile.canRead()) {System.out.println("源文件不可读");return;}if (targetFile.exists()) {if (!targetFile.isFile()) {System.out.println("目标文件不是一个文件");return;}System.out.println("目标文件已存在,是否覆盖?");// 如果不想覆盖,则可以在此处返回}```3. 文件复制文件复制可以使用Java中的IO流来实现,其中常用的IO流包括字节流和字符流。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

public class CopyFile implements Runnable { //来源文件 private String sourceFileName; //目标文件 private String targetFileName; //分块总数 private int blockCount; //开始 COPY 的块序号 private int blockNo; //缓存大小 private int maxBuffSize=1024*1024; /** * 将 sourceFileName 文件分 blockCount 块后的第 blockNo 块复制至 sourceFileName * @param sourceFileName 来源文件全名 * @param targetFileName 目标文件全名 * @param blockCount 文件分块 COPY 数 * @param blockNo 开始 COPY 的块序号 */ public CopyFile(String sourceFileName,String targetFileName,int blockCount,int block
{ ex.printStackTrace();
} }
}
package mastercn;
public class Test {
/** * @param args */ //来源文件 private static String sourceFile; //目标文件 private static String targetFile; //分块数 private static int blockCount;
多线程 javastringbyte
package mastercn; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.RandomAccessFile;
2010-03-12 01:05 4126 人阅读 评论(1) 收藏 举报
//将缓存中的字节写入文件?目标文件中 raf.write(buff, 0, curRedLength); //累计读取的字节数 totalRedLength+=curRedLength; } //关闭相关资源 raf.close(); inputStream.close(); }catch(Exception ex)
No) { this.sourceFileName=sourceFileName; this.targetFileName=targetFileName; this.blockCount=blockCount; this.blockNo=blockNo; } public void run() {
//得到来源文件 File file=new File(sourceFileName); //得到来源文件的大小 long size=file.length(); //根据文件大小及分块总数算出单个块的大小 long blockLenth=size/blockCount; //算出当前开始 COPY 的位置 long startPosition=blockLenth*blockNo; //实例化缓存 byte[] buff=new byte[maxBuffSize]; try{
Thread thread=new Thread(copyFile); //开始线程 thread.start(); try {
//加入线程 thread.join(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } //计算耗时 long endTime=System.currentTimeMillis(); //输出耗时 System.out.println("共用时:"+(endTime-beginTime)+"ms");
public static void main(String[] args) { // TODO Auto-generated method stub // sourceFile=args[0]; targetFile=args[1]; blockCount=Integer.parseInt(args[2]); //记录开始时间 long beginTime=System.currentTimeMillis(); //依次分块进行文件 COPY for(int i=0;i<blockCount;i++) { //实例化文件复制对象 CopyFile copyFile=new CopyFile(sourceFile,targetFile,blockCount,i); //实例化线程
//从源文件得到输入流 InputStream inputStream=new FileInputStream(sourceFileName); //得到目标文件的随机访问对象 RandomAccessFile raileName,"rw"); //将目标文件的指针偏移至开始位置 raf.seek(startPosition); //当前读取的字节数 int curRedLength; //累计读取字节数的和 int totalRedLength=0; //将来源文件的指针偏移至开始位置 inputStream.skip(startPosition); //依次分块读取文件 while((curRedLength=inputStream.read(buff))>0 && totalRedLength<blockLenth) {
} }
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文档
最新文档