2016年4月1日下午,《java入门123》翻开了第一页,从此走上不归路。新手初来乍到,献上见面礼
package copyfile;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class CopyFile {
/**
* 如果操作字符串的话还可以实现mac的命名方式
* 这是同文件夹下的文件复制
* @param srcFilePath 源文件路径
* @param destFilePath 目标文件路径
* @return 复制成功返回true
*/
public static boolean copyFileSamePath(String srcFilePath,String destFilePath){
File srcFile=new File(srcFilePath);
File destFile=new File(destFilePath);
if(!(srcFile.exists())){
System.out.println("源文件不存在,无法复制");
return false;
}
if(!(srcFile.getPath().equals(destFile.getPath()))){
System.out.println("此方法只能复制同一个目录下的文件");
return false;
}
if(!(srcFile.isFile())){
System.out.println("此方法只复制文件");
return false;
}
File newFile=null;
int increasing=2;
String folder=destFile.getParent();
String fileName="复件 "+destFile.getName();
String newPath=folder+File.separator+fileName;
newFile=new File(newPath);
while(newFile.exists()){
fileName="复件"+increasing++ +" "+destFile.getName();
newPath=folder+File.separator+fileName;
newFile=new File(newPath);
}
byte[] dataBytes=null;
try{
FileInputStream reader=new FileInputStream(srcFile);
dataBytes=new byte[reader.available()];
reader.read(dataBytes);
reader.close();
}catch(FileNotFoundException e){
System.out.println(e.getMessage());
}catch(IOException e){
System.out.println(e.getMessage());
}
try{
newFile.createNewFile();
FileOutputStream writer=new FileOutputStream(newFile);
writer.write(dataBytes);
writer.close();
}catch(FileNotFoundException e){
System.out.println(e.getMessage());
}catch(IOException e){
System.out.println(e.getMessage());
}
if(newFile.exists()){
return true;
}else{
return false;
}
}
/**
* 这是不同文件夹下的文件复制
* @param srcFilePath 源文件路径
* @param destFilePath 目标路径
* @param overlay 是否覆盖
* @return 成功返回true
*/
public static boolean copyFileDifferentPath(String srcFilePath,String destFilePath,boolean overlay){
File srcFile=new File(srcFilePath);
File destFile=new File(destFilePath);
if(!(srcFile.exists())){
System.out.println("源文件不存在,无法复制");
return false;
}
if(srcFile.getPath().equals(destFile.getPath())){
System.out.println("文件的目录必须不一样");
return false;
}
if(!(srcFile.isFile())){
System.out.println("此方法只复制文件");
return false;
}
if(!(srcFile.getName().equals(destFile.getName()))){
System.out.println("文件名必须一样");
return false;
}
if(destFile.exists()){
if(overlay){
destFile.delete();
}else{
System.out.println("文件重名");
return false;
}
}
try{
destFile.createNewFile();
}catch(IOException e){
e.printStackTrace();
return false;
}
byte[] dataBytes=null;
try{
FileInputStream reader=new FileInputStream(srcFile);
dataBytes=new byte[reader.available()];
reader.read(dataBytes);
reader.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
try{
FileOutputStream writer=new FileOutputStream(destFile);
writer.write(dataBytes);
writer.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
if(destFile.exists()){
return true;
}else{
return false;
}
}
/**
* 这是不同文件夹下的文件夹复制方法
* @param srcFolderPath 源文件夹地址
* @param destFolderPath 目标文件地址
* @param overlay 是否覆盖,如果覆盖那么目标文件夹内的所有同名文件和文件夹都会被替换,不同名不受影响
* @return 成功返回true
*/
public static boolean copyFolderDifferentPath(String srcFolderPath,String destFolderPath,boolean overlay){
File srcFile=new File(srcFolderPath);
File destFile=new File(destFolderPath);
if(!(srcFile.exists())){
System.out.println("源文件不存在,无法复制");
return false;
}
if(srcFile.getPath().equals(destFile.getPath())){
System.out.println("文件的目录必须不一样");
return false;
}
if(!(srcFile.getName().equals(destFile.getName()))){
System.out.println("文件夹名必须一样");
return false;
}
if(!srcFile.isDirectory()){
System.out.println("这个方法只复制文件夹");
return false;
}
if(destFile.exists()){
if(overlay){
File[] files=srcFile.listFiles();
int size=files.length;
for(int i=0;i<size;i++){
if(files[i].isFile()){
CopyFile.copyFileDifferentPath(files[i].getPath(), destFile.getPath()+File.separator+files[i].getName(), true);
}else{
CopyFile.copyFolderDifferentPath(files[i].getPath(), destFile.getPath()+File.separator+files[i].getName(), true);
}
}
}else{
System.out.println("文件夹重名");
return false;
}
}else{
destFile.mkdirs();
File[] files=srcFile.listFiles();
int size=files.length;
for(int i=0;i<size;i++){
if(files[i].isFile()){
CopyFile.copyFileDifferentPath(files[i].getPath(), destFile.getPath()+File.separator+files[i].getName(), true);
}else{
CopyFile.copyFolderDifferentPath(files[i].getPath(), destFile.getPath()+File.separator+files[i].getName(), true);
}
}
}
return true;
}
/**
* 这是同目录下的文件夹复制方法,以创建复件的方式
* @param srcFolderPath 源文件夹
* @param destFolderPath 目标文件夹
* @return 成功返回true
*/
public static boolean copyFolderSamePath(String srcFolderPath,String destFolderPath){
File srcFile=new File(srcFolderPath);
File destFile=new File(destFolderPath);
if(!(srcFile.exists())){
System.out.println("源文件不存在,无法复制");
return false;
}
if(!(srcFile.isDirectory())){
System.out.println("此方法只复制文件夹");
return false;
}
File newFile=null;
int increasing=2;
String folder=destFile.getParent();
String fileName="复件 "+destFile.getName();
String newPath=folder+File.separator+fileName;
newFile=new File(newPath);
while(newFile.exists()){
fileName="复件"+increasing++ +" "+destFile.getName();
newPath=folder+File.separator+fileName;
newFile=new File(newPath);
}
newFile.mkdirs();
File[] files=srcFile.listFiles();
int size=files.length;
for(int i=0;i<size;i++){
if(files[i].isFile()){
CopyFile.copyFileDifferentPath(files[i].getPath(), newFile.getPath()+File.separator+files[i].getName(), false);
}else{
CopyFile.copyFolderDifferentPath(files[i].getPath(), newFile.getPath()+File.separator+files[i].getName(), false);
}
}
return true;
}
public static void main(String[] args){
copyFolderSamePath("/Users/Dawn/Documents/JavaPractice/dataFile","/Users/Dawn/Documents/JavaPractice/dataFile");
}
}
这是一个拷贝文件的类,里面有4个方法,集成了文件的所有拷贝方式,包括在同目录下拷贝文件夹和文件,拷贝文件或文件夹到不同的目录,因为直接使用的输出流和输入流操作,所以对于所有文件类型都因该是支持的。
新手刚学java,不足之处还请指正
2016年4月1日下午,《java入门123》翻开了第一页,从此走上不归路。新手初来乍到,献上见面礼的更多相关文章
- 2016年12月31日 学习java 第一天
6个月没写代码了 现在从头开是学 又遇到了很基础的问题 以前配环境变量的时候 配过classpath 其实不要配classpath 因为运行的时候会优先去classpath去找 class文件 ...
- 摩根斯坦利 - 2016年09月8日 面试题 - HashMap
摩根斯坦利 - 2016年09月8日 面试题: 给定一个 Map<Person, Object> map = new HashMap<Person, Object>(); 放入 ...
- 2016年3月15日Android实习日记
1.解决了ScrollView滑动冲突问题. 2.设置好了“查看详解”与“题目编号”的部分. 3.完成了app启动图片的设置,并在启动的过程中开辟新的线程连接服务器并开启监听数据. 别忘了注册启动Ac ...
- 2016年12月31日 星期六 --出埃及记 Exodus 21:26
2016年12月31日 星期六 --出埃及记 Exodus 21:26 "If a man hits a manservant or maidservant in the eye and d ...
- 2016年12月30日 星期五 --出埃及记 Exodus 21:25
2016年12月30日 星期五 --出埃及记 Exodus 21:25 burn for burn, wound for wound, bruise for bruise.以烙还烙,以伤还伤,以打还打 ...
- 2016年12月29日 星期四 --出埃及记 Exodus 21:24
2016年12月29日 星期四 --出埃及记 Exodus 21:24 eye for eye, tooth for tooth, hand for hand, foot for foot,以眼还眼, ...
- 2016年12月28日 星期三 --出埃及记 Exodus 21:23
2016年12月28日 星期三 --出埃及记 Exodus 21:23 But if there is serious injury, you are to take life for life,若有 ...
- 2016年12月27日 星期二 --出埃及记 Exodus 21:22
2016年12月27日 星期二 --出埃及记 Exodus 21:22 "If men who are fighting hit a pregnant woman and she gives ...
- 2016年2月16日开始,每天一篇,记录学习心得,【基本技能篇】>>开篇《如何阅读一本书——心得》
如何阅读一本书——心得 ——2016年2月12日 要达到阅读的所有目的,就必须在阅读不同书籍的时候,运用适当的不同速度.读的太快或太慢,都一无所获. 四个阅读层次:①基础阅读,具有基本阅读的能力,包括 ...
随机推荐
- xargs
xargs的作用一般等同于大多数Unix shell中的反引号,但更加灵活易用,并可以正确处理输入中有空格等特殊字符的情况.对于经常产生大量输出的命令如find.locate和grep来说非常有用.
- php在window下的环境配置(VC9)
配置PHP5: 1. 配置PHP5.3.3,打开php安装目录(笔者是D:\php\php5)可以看到目录下有两个这样的文件php.ini- development和php.ini-produ ...
- Socket 与 WebSocket
本文转载自:http://zengrong.net/post/2199.htm 1. 概述 选择了 WebSocket 技术之后,不可避免的,我要将它和其他协议以及技术做一下比较.最常见的,就是需要比 ...
- 字典的快速赋值 setValuesForKeysWithDictionary
字典的快速赋值 setValuesForKeysWithDictionary 前言 在学习解析数据的时候,我们经常是这么写的:PersonModel.h文件中 @property (nona ...
- [zt]摄像机标定(Camera calibration)笔记
http://www.cnblogs.com/mfryf/archive/2012/03/31/2426324.html 一 作用建立3D到2D的映射关系,一旦标定后,对于一个摄像机内部参数K(光心焦 ...
- hdu Farm Irrigation
这题第一感觉是用搜索做,暴力就可以解决,这里将水管转换成一个个3*3的矩阵,然后搜素就可以了.写完之后确实一遍过掉了,31ms.附上代码: #include"iostream" # ...
- css渐变颜色在线制作
http://www.colorzilla.com/gradient-editor/
- java 极光推送
Web.xml配置文件 <context-param> <param-name>contextConfigLocation</param-name> <par ...
- 应该掌握的MySQL命令、MySQL语句
一.MySQL常用的命令: 1. 连接数据库:mysql>mysql -uroot -p回车,再输入密码 mysql -h 192.168.0.200 -P 3306 -u root -p2 ...
- 房间安排-nyoj168
描述 2010年上海世界博览会(Expo2010),是第41届世界博览会.于2010年5月1日至10月31日期间,在中国上海市举行.本次世博会也是由中国举办的首届世界博览会.上海世博会以“城市,让生活 ...