利用java来复制文件
public static void copyFile(String oldPath ,String newPath){
File op = new File(oldPath);
File np = new File(newPath);
int len = -1;
byte[] get = new byte[1024];
FileInputStream fis = null;
FileOutputStream fos = null;
try{
fis = new FileInputStream(op);
fos = new FileOutputStream(np);
while((len=fis.read(get))!=-1){
fos.write(get,0,len);
//每写一次刷新一次
fos.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
//确保最后都能关闭掉
if(fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fis != null){
try{
fis.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
利用递归打印文件名称
public static void printName(String path,int deep){
File str = new File(path);
for(int i=0;i<deep;i++){
System.out.print("-");
}
if(str.isFile()) //判断是不是文件
System.out.println(str.getName());
else if(str.isDirectory()){ //如果是文件夹
for(File f:str.listFiles()) //创建一个该文件的数组
printName(f.getPath(),deep+1); //递归打印
}
}
结合递归和复制,将一个文件夹内的内容复制到另一个文件夹中
关键在于得到的这个File是文件还是文件夹,如果是文件的话直接用IO流复制即可,如果是文件夹的话需要使用for循环和递归(一步一步得到该文件夹内的文件),再进行复制。
public static void copy(String oldPath,String newPath){
try{
(new File(newPath)).mkdirs();
File oldFile = new File(oldPath);
//得到原文件夹的子文件夹名称
String[] file = oldFile.list();
//借助数组拼接绝对位置(用于拷贝数据)
File temp = null;
for(int i=0;i<file.length;i++){
//如果是以分隔符作为结尾,则不用加分隔符(separator)
if(oldPath.endsWith(File.separator)){
temp = new File(oldPath+file[i]);
} else {
temp = new File(oldPath+File.separator+file[i]);
}
//如果得到的temp是文件
if(temp.isFile()){
FileInputStream fis = new FileInputStream(temp);
FileOutputStream fos = new FileOutputStream(newPath + "/" + (temp.getName()).toString());
//一次拷贝5kb
byte[] b = new byte[1024*5];
int len = -1;
while((len = fis.read(b))!=-1){
fos.write(b,0,len);
fos.flush();
}
fos.close();
fis.close();
}
//如果得到的temp是文件夹
if(temp.isDirectory()){
//采取递归逐层复制
copy(oldPath+"/"+file[i],newPath+"/"+file[i]);
}
}
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
含main方法总代码
import java.io.*;
public class FileCopy {
public static void main(String[] args) {
//复制一个文件夹的内容到另一个文件夹
String oldPath = "D:/test1";
String newPath = "D:/test2";
copy(oldPath,newPath);
//复制一个文件到另一个文件(这里没有加盘符是相对路径)
String oldFilePath = "COC.txt";
String newFileName = "CR.txt";
copyFile(oldFilePath,newFileName);
//打印一个文件夹内文件的名字,传入文件路径(deep方便观看)
printName(oldPath,0);
}
public static void copy(String oldPath,String newPath){
try{
(new File(newPath)).mkdirs();
File oldFile = new File(oldPath);
//得到原文件夹的子文件夹名称
String[] file = oldFile.list();
//借助数组拼接绝对位置(用于拷贝数据)
File temp = null;
for(int i=0;i<file.length;i++){
//如果是以分隔符作为结尾,则不用加分隔符(separator)
if(oldPath.endsWith(File.separator)){
temp = new File(oldPath+file[i]);
} else {
temp = new File(oldPath+File.separator+file[i]);
}
//如果得到的temp是文件
if(temp.isFile()){
FileInputStream fis = new FileInputStream(temp);
FileOutputStream fos = new FileOutputStream(newPath + "/" + (temp.getName()).toString());
//一次拷贝5kb
byte[] b = new byte[1024*5];
int len = -1;
while((len = fis.read(b))!=-1){
fos.write(b,0,len);
fos.flush();
}
fos.close();
fis.close();
}
//如果得到的temp是文件夹
if(temp.isDirectory()){
//采取递归逐层复制
copy(oldPath+"/"+file[i],newPath+"/"+file[i]);
}
}
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void copyFile(String oldPath ,String newPath){
File op = new File(oldPath);
File np = new File(newPath);
int len = -1;
byte[] get = new byte[1024];
FileInputStream fis = null;
FileOutputStream fos = null;
try{
fis = new FileInputStream(op);
fos = new FileOutputStream(np);
while((len=fis.read(get))!=-1){
fos.write(get,0,len);
fos.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fis != null){
try{
fis.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}
public static void printName(String path,int deep){
File str = new File(path);
for(int i=0;i<deep;i++){
System.out.print("-");
}
if(str.isFile()) //是文件
System.out.println(str.getName());
else if(str.isDirectory()){ //是文件夹
for(File f:str.listFiles()) //创建一个该文件的数组
printName(f.getPath(),deep+1);
}
}
}