大数据java篇——复制

 1.文件夹复制

package Copy;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class DirCopyDemo {
	public static String srcRoot;

	public static void main(String[] args) throws Exception {
		copyDir("d:/a/", "d:/b");

	}
	/**
	 * 复制文件夹
	 * @throws Exception 
	 */
	public static void copyDir(String srcDir,String destDir) throws Exception{
		if(srcRoot == null){
			srcRoot = srcDir;
		}
		//源文件夹
		File srcFile = new File(srcDir);
		//目标文件夹
		File destFile = new File(destDir);
		//判断srcFile有效性
		if(srcFile == null || !srcFile.exists()){
			return;
		}
		//创建目标文件夹
		if(destFile.exists()){
			destFile.mkdirs();
		}
		//判断是否是文件
		if(srcFile.isFile()){
			String absPath = srcFile.getAbsolutePath();
			//取出上级目录
			String parentDir = new File(srcRoot).getParent();
			//取出相对路径
			String relPath = absPath.substring(parentDir.length());
			File destFile2 = new File(destDir,relPath);
			//拷贝文件
			copyFile(srcFile.getAbsolutePath(),destDir);
		}
		//目录
		else{
			File[] children = srcFile.listFiles();
			if(children != null){
				for(File f : children){
					copyDir(f.getAbsolutePath(), destDir);
				}
			}
		}
	}
	
	/*
	 * 复制文件
	 */
	public static void copyFile(String file,String destDir) throws Exception{
		
		try {
			//准备目录
			String tmp = file.substring(srcRoot.length());
			String folder = new File(destDir,tmp).getParentFile().getAbsolutePath();
			File destFolder = new File(folder);
			destFolder.mkdirs();
			
			File f = new File(file);
			FileInputStream fis = new FileInputStream(file);
			if(destDir.endsWith("/") || destDir.endsWith("\\")){
			}
			else{
			}
			//
			FileOutputStream fos = new FileOutputStream(new File(destFolder,new File(file).getName()));
			byte[] buf = new byte[1024];
			int len = 0;
			while((len = fis.read(buf)) != -1){
				fos.write(buf, 0, len);
			}
			fis.close();
			fos.close();
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	

}

递归:函数自己调用自己,递归时一定要明确结束条件

2.深度复制

package IO;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class DeepCopyDemo {

	public static void main(String[] args) throws Exception {
		/**
		 * 对象图
		 */
		Cat c = new Cat() ;
		Person p = new Person() ;
		Dog d = new Dog() ;
		c.setOnwer(p) ;
		c.setNeibor(d);
		
		//浅度对象图
		Cat c2 = new Cat();	//c2的地址和c不一样,但是c2的p和d与c的p和d地址相同
		c2.setOnwer(p);
		c2.setNeibor(d);
		
		//深度复制
		/*******************写入(串行)*********************/
		//字节数组输出流
		ByteArrayOutputStream baos = new ByteArrayOutputStream();//写到内存里
		//对象输出流
		ObjectOutputStream oos = new ObjectOutputStream(baos);
		//串行化
		oos.writeObject(c2);
		oos.close();
		baos.close();
		
		/******************读取(反串行)*********************/
		byte[] bytes = baos.toByteArray();//从内存中取
		ByteArrayInputStream bais = new ByteArrayInputStream(bytes);//从内存中取
		ObjectInputStream ois = new ObjectInputStream(bais);
		 Cat cc = (Cat) ois.readObject();	//不仅cc和c的地址不同,cc的onwer和neibor与c的onwer和neibor地址都不一样,实现了深度复制
		 ois.close();
		 bais.close();
		
		

	}

}
package IO;

import java.io.Serializable;

public class Cat implements Serializable{
	
	private static final long serialVersionUID = -1451093463894453310L;
	private String name ;
	private int age ;
	private Person onwer ;
	private Dog neibor ;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Person getOnwer() {
		return onwer;
	}
	public void setOnwer(Person onwer) {
		this.onwer = onwer;
	}
	public Dog getNeibor() {
		return neibor;
	}
	public void setNeibor(Dog neibor) {
		this.neibor = neibor;
	}
	public static long getSerialversionuid() {
		return serialVersionUID;
	}
	public Cat(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public Cat() {
		super();
	}
	
	
	
	

}
package IO;

import java.io.Serializable;

public class Person implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 8875314054714509757L;
	private String name ;
	private int age ;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	

}
package IO;

import java.io.Serializable;

public class Dog implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 4668620775367884307L;
	private String name ;
	private int age ;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	

}

猜你喜欢

转载自blog.csdn.net/sp_ur/article/details/81220640