完成老师布置的作业,写了这么小小的一个例子,其实在这个例子中比较重要的也就是递归的使用,在做这个实验时,开始犯了错就是在递归上,在实现循环+递归时一定要记住方法中使用的变量的属性,是局部变量还是成员变量.
测试类:
package com.xiyou.file;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Scanner;
public class Test {
private String inputPath= "H:/C++/input/";//定义要复制的源路径
private String outputPath="H:/C++/output";//定义目标路径
public static void main(String[] args) {
Test test = new Test();
Copy copy = new Copy(test.inputPath, test.outputPath);
}
}
Copy类:
package com.xiyou.file;
import java.awt.List;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.time.chrono.IsoChronology;
import java.util.Scanner;
public class Copy {
private String inputPath;
private String outputPath;
public Copy(String inputPath, String outputPath) {
super();
this.inputPath = inputPath;
this.outputPath = outputPath;
isCopy(inputPath, outputPath);
}
/**
* 是否复制
* @param PathInput
* @param PathOutput
*/
public void isCopy(String PathInput, String PathOutput) {
File inputFile = new File(PathInput);//使用局部变量
File outputFile = new File(PathOutput);//使用局部变量
if (inputFile.isDirectory()) {
//每次进入一个新的源文件夹都在目标文件夹中建立相应的文件夹
outputFile = new File(outputFile.getPath() + File.separator
+ inputFile.getName());
outputFile.mkdirs();
String[] fileArray = inputFile.list();
for (int i = 0; i < fileArray.length; i++) {
System.out.println("========>" + fileArray[i]);
}
for (int i = 0; i < fileArray.length; i++) {
isCopy(inputFile.getPath() + File.separator + fileArray[i],
outputFile.getPath());
}
} else {
File tempOutputFile = new File(outputFile.getPath()
+ File.separator + inputFile.getName());
try {
tempOutputFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
doCopy(inputFile, tempOutputFile);
System.out.println("inputFile路径:" + inputFile.getPath());
System.out.println("outputFile路径:" + outputFile.getPath());
}
}
/**
* 文件的复制
* @param inputFile
* @param outputFile
*/
public void doCopy(File inputFile, File outputFile) {
try {
int byteread = 0;
InputStream inputStream = new FileInputStream(inputFile);
FileOutputStream fileOutputStream = new FileOutputStream(outputFile);
byte[] buffer = new byte[1024];
while ((byteread = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, byteread);
}
inputStream.close();
fileOutputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}