文件与文件夹的创建、删除、复制

本文提供了一套全面的文件操作方法,包括文件与文件夹的创建、删除、复制等实用功能的实现代码,适用于需要进行文件管理的各类应用开发场景。
  1 /**
  2  * @author 最近想跳河
  3  * 文件与文件夹的创建、删除、复制
  4  */
  5 public class FileManager {
  6     /**
  7      * 创建文件
  8      * @param path 文件路径
  9      * @return boolean类型
 10      */
 11     public static boolean crtFile(String path){
 12         boolean flag = false;//参数返回值,局部变量
 13         File file = new File(path);
 14         if (!file.exists()){
 15             try {//创建一个文件
 16                 flag = file.createNewFile();
 17             } catch (IOException e) {
 18                 e.printStackTrace();
 19             }
 20         }
 21         return flag;
 22     }
 23     /**
 24      * 创建文件夹
 25      * @param path 文件夹路径
 26      * @return boolean类型
 27      */
 28     public static boolean crtFolder(String path){
 29         boolean flag = false;//参数返回值,局部变量
 30         File file = new File(path);
 31         if (!file.exists()){
 32             flag = file.mkdir();
 33         }
 34         return flag;
 35     }
 36     /**
 37      * 删除文件
 38      * @param path 文件路径
 39      * @return boolean类型
 40      */
 41     public static boolean delFile(String path){
 42         boolean flag = false;//参数返回值,局部变量
 43         File file = new File(path);
 44         if(file.exists()&& file.isFile()){//文件且存在
 45             flag =file.delete();//删除,给局部变量赋值
 46         }
 47         return flag;
 48     }
 49     /**
 50      * 删除文件夹以及子文件及文件夹 先删除“所有子文件夹”下的文件,最后把这个空文件夹删除
 51      * @param path 文件夹路径
 52      */
 53     public static void delFolder(String path) {
 54         File folder = new File(path);
 55         if (folder.exists() && folder.isDirectory()) {// 文件夹存在且是文件夹
 56             File[] lists = folder.listFiles();// 取得文件夹下的所有文件与文件夹
 57             for (int i = 0; i < lists.length; i++) {
 58                 if (lists[i].isFile()) {// 取得所有文件
 59                     lists[i].delete();// 删除文件
 60                 }
 61                 if (lists[i].isDirectory()) {// 取得所有文件夹
 62                     delFolder(lists[i].getPath());// 递归,将所有文件夹下的文件全部删除
 63                 }
 64             }
 65         }//递归循环出来一次,就删除一个文件夹
 66         folder.delete();// 文件夹下的文件全部删除,删除空文件夹
 67     }
 68 
 69     /**
 70      * 复制文件,此为复制文件的正解。逐个缓存读取源文件,逐个缓存写入目标文件 文件结尾将会返回-1 这种方法可以读取写入的文件大小不受限制
 71      * @param sourcePath 源文件路径
 72      * @param targetPath 目标文件路径
 73      * @throws IOException 抛错
 74      */
 75     public static void copyFile(String sourcePath, String targetPath)
 76             throws IOException {
 77         if (!sourcePath.equals(targetPath)) {// 源文件路径和拷贝的目标路径不一致才可以执行
 78             File fileSource = new File(sourcePath);// 源文件实例化
 79             if (fileSource.exists()) {// 源文件存在
 80                 if (fileSource.isFile()) {// 判断源文件是否为“文件”
 81                     File fileTarget = new File(targetPath);// 目标文件实例化
 82                     InputStream streamIn = new FileInputStream(fileSource);// 输入流,输入对象源文件
 83                     OutputStream streamOut = new FileOutputStream(fileTarget);// 输出流,输出对象目标文件
 84                     byte[] buff = new byte[1024];// 声明1024字节的缓存
 85                     for (int i = 0; (i = streamIn.read(buff)) > 0;) {// 逐个缓存读取,再输入流到达结尾时i=-1不满足循环条件
 86                         streamOut.write(buff);// 逐个缓存写入
 87                     }
 88                     streamIn.close();// 关闭输入流
 89                     streamOut.close();// 关闭输出流
 90                 }
 91             }
 92         }
 93     }
 94 
 95     /**
 96      * 复制文件夹
 97      * @param source 源文件夹
 98      * @throws IOException
 99      */
100     public static void copyFolder(String source, String target)
101             throws IOException {
102         if (!source.equals(target)) {// 源文件路径和拷贝的目标路径不一致才可以执行
103             File fileSource = new File(source);// 源文件实例化
104             if (fileSource.exists()) {// 源文件存在
105                 if (fileSource.isDirectory()) {// 判断源文件是否为“文件夹”
106                     File fileTarget = new File(target);
107                     fileTarget.mkdir();// 创建目标文件夹
108                     File[] lists = fileSource.listFiles();// 取得此文件夹下的所有文件及文件夹
109                     for (int i = 0; i < lists.length; i++) {
110                         if (lists[i].isFile()) {
111                             // 路径寻找较为周折,源路径不会变化。目标路径=拷贝文件路径+分隔符+源文件名称
112                             FileManager.copyFile(lists[i].getPath(),
113                                     fileTarget.getPath() + File.separatorChar
114                                             + lists[i].getName());
115                         }
116                         if (lists[i].isDirectory()) {// 有子文件夹则递归,递归只需要考虑下一个就可以了
117                             copyFolder(lists[i].getPath(), target
118                                     + File.separatorChar + lists[i].getName());// 递归
119                         }
120                     }
121                 }
122             }
123         }
124     }
125 }

转载于:https://www.cnblogs.com/ponyblog/archive/2011/12/16/2289619.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值