package question8;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/*
* 编写程序,拷贝一个带内容的文件夹。
* 例如:将c:\program files\java 文件夹拷贝到d盘根目录。
*/
public class CopyFolder
{
public static void main(String[] args)
{
//只要不是错误目录就行,文件夹结尾加不加
//斜杠都行,没有区别
Copy("c:/program files/java", "D:/");
}
public static void Copy(String srcPath, String desPath)
{
File srcFile = new File(srcPath);
File desFile = new File(desPath);
//如果给定的源路径是文件夹
if(srcFile.isDirectory())
{
//如果是文件夹的话,路径需要增加一个斜杠,
//用File.getpath可以避免输入的路径有斜杠
//和没有斜杠导致的一些问题
srcPath = srcFile.getPath()+File.separator;
desPath = desFile.getPath()+File.separator;
System.out.println(srcPath + " -> " + desPath);
//遍历整个文件夹下的所有文件和子文件,
//并通过递归调用自己实现所有文件的复制
String[] fileList = srcFile.list();
for (String fileName : fileList)
{
Copy(srcPath+fileName, desPath+fileName);
}
}
//如果给定的源路径是文件
else if(srcFile.isFile())
{
System.out.println(srcPath + " -> " + desPath);
CopyFile(srcPath, desPath);
}
//如果源路径不合法
else
{
throw new IllegalArgumentException("源文件(夹)不存在");
}
}
public static void CopyFile(String srcPath, String desPath)
{
try
{
File srcFile = new File(srcPath);
File desFile = new File(desPath);
//仅当源文件为文件时才复制,目录无法创建流
//会抛出异常
if(srcFile.isFile())
{
//创建文件以及该路径里不存在的目录
desFile.getParentFile().mkdirs();
if(!desFile.exists())
desFile.createNewFile();
//取得源文件与目标文件的流
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(desFile);
//将源文件写入目标文件
while(0 < fis.available())
{
fos.write(fis.read());
}
//关闭输入输出流
fis.close();
fos.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
拷贝文件夹及其所有内容,支持单个文件
最新推荐文章于 2021-03-31 18:08:52 发布