题目:
使用多线程实现多个文件同步复制功能。例如:把文件A复制到E盘某文件夹下复制到F盘。
可能太难,所以一步一步来,先来一个文件的复制。
Demo.java
package com.CopyFile;
import java.io.*;
public class Demo {
public static void main(String[] args) throws IOException {
Filecopy.readFile(); //自己创建的类名,和方法名
}
}
----------------------------------------------------------------------------
Filecopy.java
package com.CopyFile;
import java.io.*;
public class Filecopy {
public static final String COPY_FILE = "F:\\lalala.txt"; //需要copy的文件
public static final String TARGET_FILE = "E:\\hahaha.txt"; //copy的目标路径
public static void readFile() throws IOException { //抛出IO异常
File file = new File(COPY_FILE); //new一个file对象
File outFile = new File(TARGET_FILE); //new一个outfile对象
if (outFile.isFile()) { //如果没有找到目标文件,则创建新的文件
outFile.createNewFile(); 调用方法创建文件
}
InputStream is = null;
OutputStream os = null;
try {
is = new FileInputStream(file); //文件输入流
os = new FileOutputStream(outFile); //文件输出流
int length=0; //读取的长度
byte[] temp = new byte[1024]; // 一次读取1024字节
while ((length = is.read(temp)) != -1) {
os.write(temp,0,length); // 写入新文件中
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {//关闭输入输出流
if (os != null) {
os.close();
}
if (is != null) {
is.close();
}
}
}
}
通过线程来复制文件:
Demo.java
------------------------
package com.CopyFile;
import java.io.*;
public class Demo {
public static final String COPY_FILE = "F:\\lalala.txt"; //需要copy的文件
public static final String TARGET_FILE = "E:\\hahaha.txt"; //copy的目标路径
public static void main(String[] args) throws IOException {
Filecopy fc = new Filecopy(COPY_FILE, TARGET_FILE); //自己创建的类名,和方法名
fc.start();
}
}
************************************************
Filecopy.java
-------------------------
package com.fuzhiThread;
import static com.fuzhiThread.Demo.COPY_FILE;
import static com.fuzhiThread.Demo.TARGET_FILE;
import java.io.*;
public class CopyFile extends Thread{
public void run(){
File file = new File(COPY_FILE);
File outFile = new File(TARGET_FILE);
if (outFile.isFile()){
try {
outFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
InputStream is = null; //因为在最后需要关闭输入输出流,所以定义在外面。
OutputStream os = null;
try {
is = new FileInputStream(file);
os = new FileOutputStream(outFile);
int length = 0;
byte[] temp = new byte[1024]; //一次输出1024字节,1M,当然,也可以定义为2M或者更多。
if((length = is.read(temp)) != -1){ //如果没有读完,则继续读,若完毕则跳出while循环。
os.write(temp, 0, length); // 从指定的字节数组写入 len个字节,从偏移 off开始输出到此输出流。JDK1.8支持。
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
is.close(); //关闭输入流
os.close(); //关闭输出流
} catch (IOException e) {
e.printStackTrace();
}
}
}
}