`
fanjf
  • 浏览: 296009 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

Java复制、移动、删除、获取大小文件

    博客分类:
  • Java
 
阅读更多

利用Apache Commons IO工具包(commons-io-1.4.jar)来实现文件(夹)的复制、移动、删除、获取大小等操作。

package com.util.file;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.StringReader;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.AndFileFilter;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.NotFileFilter;
import org.apache.commons.io.filefilter.SuffixFileFilter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
* 文件工具
*/
public final class FileToolkit {
        private static final Log log = LogFactory.getLog(FileToolkit.class);

        /**
         * 复制文件或者目录到指定的文件夹,复制前后文件完全一样。
         *
         * @param resFilePath 源文件路径
         * @param distFolder    目标文件夹
         * @IOException 当操作发生异常时抛出
         */
        public static void copyFile(String resFilePath, String distFolder) throws IOException {
                File resFile = new File(resFilePath);
                File distFile = new File(distFolder);
                //判断是目录,还是文件
                if (resFile.isDirectory()) {
                        FileUtils.copyDirectoryToDirectory(resFile, distFile);
                } else if (resFile.isFile()) {
                        FileUtils.copyFileToDirectory(resFile, distFile, true);
                }
        }

        /**
         * 删除一个文件或者目录
         *
         * @param targetPath 文件或者目录路径
         * @IOException 当操作发生异常时抛出
         */
        public static void deleteFile(String targetPath) throws IOException {
            File targetFile = new File(targetPath);
            //判断是目录,还是文件
            if (targetFile.isDirectory()) {
                FileUtils.deleteDirectory(targetFile);
            } else if (targetFile.isFile()) {
                targetFile.delete();
            }
        }

        /**
         * 移动文件或者目录,移动前后文件完全一样,如果目标文件夹不存在则创建。
         *
         * @param resFilePath 源文件路径
         * @param distFolder    目标文件夹
         * @IOException 当操作发生异常时抛出
         */
        public static void moveFile(String resFilePath, String distFolder) throws IOException {
                File resFile = new File(resFilePath);
                File distFile = new File(distFolder);
                if (resFile.isDirectory()) {
                        FileUtils.moveDirectoryToDirectory(resFile, distFile, true);
                } else if (resFile.isFile()) {
                        FileUtils.moveFileToDirectory(resFile, distFile, true);
                }
        }

        /**
         * 重命名文件或文件夹
         *
         * @param resFilePath 源文件路径
         * @param newFileName 重命名
         * @return 操作成功标识
         */
        public static boolean renameFile(String resFilePath, String newFileName) {
                String newFilePath = FileToolkit.getParentPath(resFilePath) + "/" + newFileName;
                File resFile = new File(resFilePath);
                File newFile = new File(newFilePath);
                return resFile.renameTo(newFile);
        }

        /**
         * 根据文件或者目录路径,取得其父路径
         * @param filePath
         * @return String
         */
        private static String getParentPath(String filePath){
            if(filePath != null && filePath.indexOf("/")>-1){
                String parentPath = filePath.substring(0, filePath.indexOf("/"));
                System.out.println("源文件路径:" + filePath);
                System.out.println("父文件路径:" + parentPath);
                return parentPath;
            }else{
                return "";
            }
        }
       
        /**
         * 读取文件或者目录的字节大小
         *
         * @param distFilePath 目标文件或者文件夹
         * @return 文件或者目录的大小,如果获取失败,则返回-1
         */
        public static long genFileSize(String distFilePath) {
                File distFile = new File(distFilePath);
                if (distFile.isFile()) {
                        return distFile.length();
                } else if (distFile.isDirectory()) {
                        return FileUtils.sizeOfDirectory(distFile);
                }
                return -1L;
        }

        /**
         * 判断一个文件是否存在
         *
         * @param filePath 文件路径
         * @return 存在返回true,否则返回false
         */
        public static boolean isExist(String filePath) {
                return new File(filePath).exists();
        }

        /**
         * 本地某个目录下的文件列表(不递归:即不查询子目录存在的文件列表)
         *
         * @param folder ftp上的某个目录
         * @param suffix 文件的后缀名(比如.mov.xml)
         * @return 文件名称列表
         */
        public static String[] listFilebySuffix(String folder, String suffix) {
            if(suffix == null){
                return new String[]{};
            }
           
            IOFileFilter fileFilter1 = new SuffixFileFilter(suffix);
            IOFileFilter fileFilter2 = new NotFileFilter(DirectoryFileFilter.INSTANCE);
            FilenameFilter filenameFilter = new AndFileFilter(fileFilter1, fileFilter2);
            return new File(folder).list(filenameFilter);
        }

        /**
         * 将字符串写入指定文件(当指定的父路径中文件夹不存在时,会最大限度去创建,以保证保存成功!)
         * 注意:会覆盖原有的文件内容
         * @param res  原字符串
         * @param filePath 文件路径
         * @return 成功标记
         */
        public static boolean string2File(String res, String filePath) {
                boolean flag = true;
                BufferedReader bufferedReader = null;
                BufferedWriter bufferedWriter = null;
                try {
                        File distFile = new File(filePath);
                        if (!distFile.getParentFile().exists()) distFile.getParentFile().mkdirs();
                        bufferedReader = new BufferedReader(new StringReader(res));
                        bufferedWriter = new BufferedWriter(new FileWriter(distFile));
                        char buf[] = new char[1024];         //字符缓冲区
                        int len;
                        while ((len = bufferedReader.read(buf)) != -1) {
                                bufferedWriter.write(buf, 0, len);
                        }
                        bufferedWriter.flush();
                        bufferedReader.close();
                        bufferedWriter.close();
                } catch (IOException e) {
                        flag = false;
                        e.printStackTrace();
                }
                return flag;
        }
}

 

分享到:
评论

相关推荐

    java实现对文件的各种操作的工具类.md

    # java实现对文件的各种操作的工具类 ## 可以实现的操作有: 1. 删除单个文件 2. 删除文件夹及文件夹下的文件 3. 使用文件流对单个文件进行复制 ... 4. 复制整个文件夹内容(包含子文件夹... 获取文件或文件夹的大小

    JAVA上百实例源码以及开源项目

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    java源码包---java 源码 大量 实例

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    java源码包4

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...

    JAVA上百实例源码以及开源项目源代码

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    java源码包3

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...

    java源码包2

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...

    java jdk实列宝典 光盘源代码

    java的声音处理,介绍java中如何处理声音,包括实现响铃,播放wav,au等音频文件,以及控制声音的大小和音量,Beep.java; 媒体播放器,JMFMediaPlayer.java; 12反射 是java程序开发的特征之一,允许java程序对自身...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...

    Android开发人员不得不收集的代码

    获取文件大小 getFileSize 关闭IO closeIO 根据全路径获取最长目录 getDirName 根据全路径获取文件名 getFileName 根据全路径获取文件名不带拓展名 getFileNameNoExtension 根据全路径获取文件拓展名 getFile...

    java范例开发大全源代码

     实例123 复制指定目录下的文件 170  实例124 显示文件中的内容 173  实例125 将数据保存到指定的文件中 175  实例126 将由键盘中录入的信息保存到文件中 176  实例127 一个文件变成多个小文件 178 ...

    java范例开发大全

    实例123 复制指定目录下的文件 170 实例124 显示文件中的内容 173 实例125 将数据保存到指定的文件中 175 实例126 将由键盘中录入的信息保存到文件中 176 实例127 一个文件变成多个小文件 178 实例128 多个小文件...

    Java范例开发大全 (源程序)

     实例123 复制指定目录下的文件 170  实例124 显示文件中的内容 173  实例125 将数据保存到指定的文件中 175  实例126 将由键盘中录入的信息保存到文件中 176  实例127 一个文件变成多个小文件 178  实例...

    Java范例开发大全(全书源程序)

    实例123 复制指定目录下的文件 170 实例124 显示文件中的内容 173 实例125 将数据保存到指定的文件中 175 实例126 将由键盘中录入的信息保存到文件中 176 实例127 一个文件变成多个小文件 178 实例128 多个小...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...

    java 面试题 总结

    JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

Global site tag (gtag.js) - Google Analytics