文件处理类总结

1:依赖 compile ‘commons-io:commons-io:2.5‘

可使用FileUtils里的各种文件处理方法

2:文件处理类DirTraversal

** * 文件夹遍历 * @author miaowei * */public class DirTraversal {

//no recursion    public static LinkedList<File> listLinkedFiles(String strPath) {        LinkedList<File> list = new LinkedList<File>();        File dir = new File(strPath);        File file[] = dir.listFiles();        for (int i = 0; i < file.length; i++) {            /*if (file[i].isDirectory()){

list.add(file[i]);            }else{

System.out.println(file[i].getAbsolutePath());

}*/            list.add(file[i]);        }        /*File tmp;        while (!list.isEmpty()) {            tmp = (File) list.removeFirst();            if (tmp.isDirectory()) {                file = tmp.listFiles();                if (file == null)                    continue;                for (int i = 0; i < file.length; i++) {                    if (file[i].isDirectory())                        list.add(file[i]);                    else                        System.out.println(file[i].getAbsolutePath());                }            } else {                System.out.println(tmp.getAbsolutePath());            }        }*/        return list;    }

//recursion    public static ArrayList<File> listFiles(String strPath) {        return refreshFileList(strPath);    }

public static ArrayList<File> refreshFileList(String strPath) {        ArrayList<File> filelist = new ArrayList<File>();        File dir = new File(strPath);        File[] files = dir.listFiles();

if (files == null)            return null;        for (int i = 0; i < files.length; i++) {            if (files[i].isDirectory()) {                refreshFileList(files[i].getAbsolutePath());            } else {                if(files[i].getName().toLowerCase().endsWith("zip")){

filelist.add(files[i]);                }

}        }        return filelist;    }

public static ArrayList<File> arrayListFiles(String strPath){

ArrayList<File> filelist = new ArrayList<File>();        File dir = new File(strPath);        File[] files = dir.listFiles();        for (int i = 0; i < files.length; i++) {

filelist.add(files[i].getAbsoluteFile());        }        return filelist;    }    //-----4.0读取文件的报 open failed: ENOENT (No such file or directory)    /**     * 1\可先创建文件的路径     * @param filePath     */    public static void makeRootDirectory(String filePath) {        File file = null;        try {            file = new File(filePath);            if (!file.exists()) {                file.mkdir();            }        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * 2\然后在创建文件名就不会在报该错误     * @param filePath     * @param fileName     * @return     */    public static File getFilePath(String filePath, String fileName) {        File file = null;        makeRootDirectory(filePath);        try {            file = new File(filePath + fileName);        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return file;    }    /**     * 删除文件夹以及目录下的文件     * @param   filePath 被删除目录的文件路径     * @return  目录删除成功返回true,否则返回false     */    public static boolean deleteDirectory(String filePath) {        boolean flag = false;        //如果filePath不以文件分隔符结尾,自动添加文件分隔符        if (!filePath.endsWith(File.separator)) {            filePath = filePath + File.separator;        }        File dirFile = new File(filePath);        if (!dirFile.exists() || !dirFile.isDirectory()) {            return false;        }        flag = true;        File[] files = dirFile.listFiles();        //遍历删除文件夹下的所有文件(包括子目录)        for (int i = 0; i < files.length; i++) {            if (files[i].isFile()) {                //删除子文件                flag = deleteFile(files[i].getAbsolutePath());                if (!flag) break;            } else {                //删除子目录                flag = deleteDirectory(files[i].getAbsolutePath());                if (!flag) break;            }        }        if (!flag) return false;        //删除当前空目录        return dirFile.delete();    }

3:压缩,解压类ZipUtils
/** * Java utils 实现的Zip工具 * @author miaowei * */public class ZipUtils {

private static final int BUFF_SIZE = 1024 * 1024; // 1M Byte

/**     * 批量压缩文件(夹)     *     * @param resFileList 要压缩的文件(夹)列表     * @param zipFile 生成的压缩文件     * @throws IOException 当压缩过程出错时抛出     */    public static void zipFiles(Collection<File> resFileList, File zipFile) throws IOException {        ZipOutputStream zipout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile), BUFF_SIZE));        for (File resFile : resFileList) {            zipFile(resFile, zipout, "");        }        zipout.close();    }

/**     * 批量压缩文件(夹)     *     * @param resFileList 要压缩的文件(夹)列表     * @param zipFile 生成的压缩文件     * @param comment 压缩文件的注释     * @throws IOException 当压缩过程出错时抛出     */    public static void zipFiles(Collection<File> resFileList, File zipFile, String comment)            throws IOException {        ZipOutputStream zipout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(                zipFile), BUFF_SIZE));        for (File resFile : resFileList) {            zipFile(resFile, zipout, "");        }        zipout.setComment(comment);        zipout.close();    }

/**     * 解压缩一个文件     *     * @param zipFile 压缩文件     * @param folderPath 解压缩的目标目录     * @throws IOException 当解压缩过程出错时抛出     */    public static void upZipFile(File zipFile, String folderPath) throws ZipException, IOException {        File desDir = new File(folderPath);        if (!desDir.exists()) {            desDir.mkdirs();        }        ZipFile zf = new ZipFile(zipFile);        for (Enumeration<?> entries = zf.entries(); entries.hasMoreElements();) {            ZipEntry entry = ((ZipEntry)entries.nextElement());            if (entry.isDirectory()) {

continue;            }            InputStream in = zf.getInputStream(entry);            String str = folderPath + File.separator + entry.getName();            str = new String(str.getBytes(), "utf-8");            File desFile = new File(str);            if (!desFile.exists()) {                File fileParentDir = desFile.getParentFile();                if (!fileParentDir.exists()) {                    fileParentDir.mkdirs();                }                desFile.createNewFile();            }            OutputStream out = new FileOutputStream(desFile);            byte buffer[] = new byte[BUFF_SIZE];            int realLength;            while ((realLength = in.read(buffer)) > 0) {                out.write(buffer, 0, realLength);            }            in.close();            out.close();        }    }

/**     * 解压文件名包含传入文字的文件     *     * @param zipFile 压缩文件     * @param folderPath 目标文件夹     * @param nameContains 传入的文件匹配名     * @throws ZipException 压缩格式有误时抛出     * @throws IOException IO错误时抛出     */    public static ArrayList<File> upZipSelectedFile(File zipFile, String folderPath,                                                    String nameContains) throws ZipException, IOException {        ArrayList<File> fileList = new ArrayList<File>();

File desDir = new File(folderPath);        if (!desDir.exists()) {            desDir.mkdir();        }

ZipFile zf = new ZipFile(zipFile);        for (Enumeration<?> entries = zf.entries(); entries.hasMoreElements();) {            ZipEntry entry = ((ZipEntry)entries.nextElement());            if (entry.getName().contains(nameContains)) {                InputStream in = zf.getInputStream(entry);                String str = folderPath + File.separator + entry.getName();                str = new String(str.getBytes("utf-8"), "gbk");                // str.getBytes("GB2312"),"8859_1" 输出                // str.getBytes("8859_1"),"GB2312" 输入                File desFile = new File(str);                if (!desFile.exists()) {                    File fileParentDir = desFile.getParentFile();                    if (!fileParentDir.exists()) {                        fileParentDir.mkdirs();                    }                    desFile.createNewFile();                }                OutputStream out = new FileOutputStream(desFile);                byte buffer[] = new byte[BUFF_SIZE];                int realLength;                while ((realLength = in.read(buffer)) > 0) {                    out.write(buffer, 0, realLength);                }                in.close();                out.close();                fileList.add(desFile);            }        }        return fileList;    }

/**     * 获得压缩文件内文件列表     *     * @param zipFile 压缩文件     * @return 压缩文件内文件名称     * @throws ZipException 压缩文件格式有误时抛出     * @throws IOException 当解压缩过程出错时抛出     */    public static ArrayList<String> getEntriesNames(File zipFile) throws ZipException, IOException {        ArrayList<String> entryNames = new ArrayList<String>();        Enumeration<?> entries = getEntriesEnumeration(zipFile);        while (entries.hasMoreElements()) {            ZipEntry entry = ((ZipEntry)entries.nextElement());            entryNames.add(new String(getEntryName(entry).getBytes("GB2312"), "8859_1"));        }        return entryNames;    }    /**     * 获得压缩文件内压缩文件对象以取得其属性     *     * @param zipFile 压缩文件     * @return 返回一个压缩文件列表     * @throws ZipException 压缩文件格式有误时抛出     * @throws IOException IO操作有误时抛出     */    public static Enumeration<?> getEntriesEnumeration(File zipFile) throws ZipException,            IOException {        ZipFile zf = new ZipFile(zipFile);        return zf.entries();    }    /**     * 取得压缩文件对象的注释     *     * @param entry 压缩文件对象     * @return 压缩文件对象的注释     * @throws UnsupportedEncodingException     */    public static String getEntryComment(ZipEntry entry) throws UnsupportedEncodingException {        return new String(entry.getComment().getBytes("GB2312"), "8859_1");    }    /**     * 取得压缩文件对象的名称     *     * @param entry 压缩文件对象     * @return 压缩文件对象的名称     * @throws UnsupportedEncodingException     */    public static String getEntryName(ZipEntry entry) throws UnsupportedEncodingException {        return new String(entry.getName().getBytes("GB2312"), "8859_1");    }    /**     * 压缩文件     *     * @param resFile 需要压缩的文件(夹)     * @param zipout 压缩的目的文件     * @param rootpath 压缩的文件路径     * @throws FileNotFoundException 找不到文件时抛出     * @throws IOException 当压缩过程出错时抛出     */    private static void zipFile(File resFile, ZipOutputStream zipout, String rootpath)            throws FileNotFoundException, IOException {        rootpath = rootpath + (rootpath.trim().length() == 0 ? "" : File.separator)                + resFile.getName();        rootpath = new String(rootpath.getBytes(), "utf-8");        if (resFile.isDirectory()) {            File[] fileList = resFile.listFiles();            for (File file : fileList) {                zipFile(file, zipout, rootpath);            }        } else {            byte buffer[] = new byte[BUFF_SIZE];            BufferedInputStream in = new BufferedInputStream(new FileInputStream(resFile),                    BUFF_SIZE);            zipout.putNextEntry(new ZipEntry(rootpath));            int realLength;            while ((realLength = in.read(buffer)) != -1) {                zipout.write(buffer, 0, realLength);            }            in.close();            zipout.flush();            zipout.closeEntry();        }    }    //第二种实现    public static void zip(String src, String dest) throws IOException {        // 提供了一个数据项压缩成一个ZIP归档输出流        ZipOutputStream out = null;        try {            //DirTraversal.makeRootDirectory(dest);            //File outFile = DirTraversal.getFilePath(dest,"cache.zip");            File outFile = new File(dest);// 源文件或者目录            File fileOrDirectory = new File(src);// 压缩文件路径            out = new ZipOutputStream(new FileOutputStream(outFile));            // 如果此文件是一个文件,否则为false。            if (fileOrDirectory.isFile()) {                zipFileOrDirectory(out, fileOrDirectory, "");            } else {                // 返回一个文件或空阵列。                File[] entries = fileOrDirectory.listFiles();                for (int i = 0; i < entries.length; i++) {                    // 递归压缩,更新curPaths                    zipFileOrDirectory(out, entries[i], "");                }            }        } catch (IOException ex) {            ex.printStackTrace();        } finally {            // 关闭输出流            if (out != null) {                try {                    out.close();                } catch (IOException ex) {                    ex.printStackTrace();                }            }        }    }    private static void zipFileOrDirectory(ZipOutputStream out,                                           File fileOrDirectory, String curPath) throws IOException {        // 从文件中读取字节的输入流        FileInputStream in = null;        try {            // 如果此文件是一个目录,否则返回false。            if (!fileOrDirectory.isDirectory()) {                // 压缩文件                byte[] buffer = new byte[4096];                int bytes_read;                in = new FileInputStream(fileOrDirectory);                // 实例代表一个条目内的ZIP归档                ZipEntry entry = new ZipEntry(curPath                        + fileOrDirectory.getName());                // 条目的信息写入底层流                out.putNextEntry(entry);                while ((bytes_read = in.read(buffer)) != -1) {                    out.write(buffer, 0, bytes_read);                }                out.closeEntry();            } else {                // 压缩目录                File[] entries = fileOrDirectory.listFiles();                for (int i = 0; i < entries.length; i++) {                    // 递归压缩,更新curPaths                    zipFileOrDirectory(out, entries[i], curPath                            + fileOrDirectory.getName() + "/");                }            }        } catch (IOException ex) {            ex.printStackTrace();            // throw ex;        } finally {            if (in != null) {                try {                    in.close();                } catch (IOException ex) {                    ex.printStackTrace();                }            }        }    }    @SuppressWarnings("unchecked")    public static void unzip(String zipFileName, String outputDirectory)            throws IOException {        ZipFile zipFile = null;        try {            zipFile = new ZipFile(zipFileName);            Enumeration e = zipFile.entries();            ZipEntry zipEntry = null;            File dest = new File(outputDirectory);            dest.mkdirs();            while (e.hasMoreElements()) {                zipEntry = (ZipEntry) e.nextElement();                String entryName = zipEntry.getName();                InputStream in = null;                FileOutputStream out = null;                try {                    if (zipEntry.isDirectory()) {                        String name = zipEntry.getName();                        name = name.substring(0, name.length() - 1);                        File f = new File(outputDirectory + File.separator                                + name);                        f.mkdirs();                    } else {                        int index = entryName.lastIndexOf("\\");                        if (index != -1) {                            File df = new File(outputDirectory + File.separator                                    + entryName.substring(0, index));                            df.mkdirs();                        }                        index = entryName.lastIndexOf("/");                        if (index != -1) {                            File df = new File(outputDirectory + File.separator                                    + entryName.substring(0, index));                            df.mkdirs();                        }                        File f = new File(outputDirectory + File.separator                                + zipEntry.getName());                        // f.createNewFile();                        in = zipFile.getInputStream(zipEntry);                        out = new FileOutputStream(f);                        int c;                        byte[] by = new byte[1024];                        while ((c = in.read(by)) != -1) {                            out.write(by, 0, c);                        }                        out.flush();                    }                } catch (IOException ex) {                    ex.printStackTrace();                    throw new IOException("解压失败:" + ex.toString());                } finally {                    if (in != null) {                        try {                            in.close();                        } catch (IOException ex) {                        }                    }                    if (out != null) {                        try {                            out.close();                        } catch (IOException ex) {                        }                    }                }            }        } catch (IOException ex) {            ex.printStackTrace();            throw new IOException("解压失败:" + ex.toString());        } finally {            if (zipFile != null) {                try {                    zipFile.close();                } catch (IOException ex) {                }            }        }    }    public static void copy(Context myContext, String ASSETS_NAME,                            String savePath, String saveName) {        String filename = savePath + "/" + saveName;        File dir = new File(savePath);        // 如果目录不中存在,创建这个目录        if (!dir.exists())            dir.mkdir();       try {            if (!(new File(filename)).exists()) {                InputStream is = myContext.getResources().getAssets()                .open(ASSETS_NAME);                FileOutputStream fos = new FileOutputStream(filename);                byte[] buffer = new byte[7168];                int count = 0;                while ((count = is.read(buffer)) > 0) {                    fos.write(buffer, 0, count);                    }                fos.close();                is.close();                }            } catch (Exception e) {            e.printStackTrace();            }        }    public static  Boolean CopyAssetsDir(Context context,String src,String des) {        //复制安卓Assets下的“非空目录”到des文件夹,注意是否对des有写权限        Boolean isSuccess = true;        String[] files;        try        {            files = context.getAssets().list(src);        }        catch (IOException e1)        {            return false;        }        if(files.length==0){            isSuccess = CopyAssetsFile(context,src,des);//对于文件直接复制            if(!isSuccess)                return isSuccess;        }        else{            File srcfile = new File(des+"/"+src);            if(!srcfile.exists()){                if(srcfile.mkdirs()){//对于目录自行创建                    for(int i=0;i<files.length;i++){//新浪博客的限制,这里的小于号请自行替换为英文的                        isSuccess = CopyAssetsDir(context,src + "/"+files[i], des);//递归调用                        if(!isSuccess)                            return isSuccess;                    }                }                else{                    return false;                }            }        }        return isSuccess;    }    public static Boolean CopyAssetsFile(Context context,String filename, String des) {        Boolean isSuccess = true;        //复制安卓apk的assets目录下任意路径的单个文件到des文件夹,注意是否对des有写权限        AssetManager assetManager = context.getAssets();        InputStream in = null;        OutputStream out = null;        try {            in = assetManager.open(filename);            String newFileName = des + "/" + filename;            out = new FileOutputStream(newFileName);            byte[] buffer = new byte[1024];            int read;            while ((read = in.read(buffer)) != -1) {                out.write(buffer, 0, read);            }            in.close();            in = null;            out.flush();            out.close();            out = null;        } catch (Exception e) {            e.printStackTrace();            isSuccess = false;        }        return isSuccess;    }}
时间: 2024-10-05 07:11:30

文件处理类总结的相关文章

FileUtils.java 本地 文件操作工具类

package Http; import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException; /** * * 本地文件操作工具类 *保存文本 *保存图片 * Created by lxj-pc on 2017/6/27. */public class FileUtils { public static void saveText(String cont

C++学习47 文件的概念 文件流类与文件流对象 文件的打开与关闭

迄今为止,我们讨论的输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的.在实际应用中,常以磁盘文件作为对象.即从磁盘文件读取数据,将数据输出到磁盘文件.磁盘是计算机的外部存储器,它能够长期保留信息,能读能写,可以刷新重写,方便携带,因而得到广泛使用. 文件(file)是程序设计中一个重要的概念.所谓“文件”,一般指存储在外部介质上数据的集合.一批数据是以文件的形式存放在外部介质(如磁盘.光盘和U盘)上的.操 作系统是以文件为单位对数据进行管理的,也就是说,如果想找存在外部

Code片段 : .properties属性文件操作工具类 &amp; JSON工具类

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “贵专” — 泥瓦匠 一.java.util.Properties API & 案例 java.util.Properties 是一个属性集合.常见的api有如下: load(InputStream inStream)  从输入流中读取属性 getProperty(String key)  根据key,获取属性值 getOrDefault(Object key, V defaultValue)

Java笔记二十.深入解析I/O编程之文件访问类

深入解析I/O编程之文件访问类 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 开始学习字节流类之前,我们来先看下与文件有关的类-File类.File类是IO包中唯一代表磁盘文件本身的对象,File类定义了一些与平台无关的方法来操作文件,通过调用File类提供的各种方法,我们能够创建.删除文件.重命名文件以及判断文件的读写权限及其是否存在,设置和查询文件的最近修改时间等.在Java中,目录也被当作File使用,只是多了一些目录特有的功能---

java中IO写文件工具类

下面是一些根据常用java类进行组装的对文件进行操作的类,平时,我更喜欢使用Jodd.io中提供的一些对文件的操作类,里面的方法写的简单易懂. 其中jodd中提供的JavaUtil类中提供的方法足够我们使用,里面的方法写的非常简练,例如append,read等方法,封装更好,更符合面向对象, 这里面我写的一些方法可多都是模仿jodd,从里面进行抽取出来的. /** * 获取路径文件夹下的所有文件 * @param path * @return */ public static File[] ge

Linux下的文件查找类命令(转载)

如何快速有效的定位文件系统内所需要查找的文件呢?Linux为我们提供了一些文件查找类的命令,我们需要掌握以下几个命令: http://blog.csdn.net/sailor201211/article/details/53290470 which 命令which会依照用户的PATH环境变量查找一个外部命令对应的可执行文件的路径.如: $ which gcc /usr/bin/gcc whereis 和which命令相比,whereis命令则可以定位一个外部命令的二进制文件.源代码文件及用户手册

查找文件 CFileFind类

查找文件  CFileFind类  提取文件图标  显示大图标  显示小图标    一.查找文件   1.CFileFind类 //c:\mydir\myfile.txt GetFileName 获取文件名 myfile.txt GetFilePath 获取文件路径c:\mydir\myfile.txt GetFileTitle 获取文件标题 myfile Close 关掉搜索请求,释放掉占用资源 FindFile 搜索目录,成功返回非零值,否则返回0 FindNextFile 继FindFil

Java IO(文件操作工具类)

FileOperate实现的功能: 1. 返回文件夹中所有文件列表 2. 读取文本文件内容 3. 新建目录 4. 新建多级目录 5. 新建文件 6. 有编码方式的创建文件 7. 删除文件 8. 删除指定文件夹下所有文件 9. 复制单个文件 10. 复制整个文件夹的内容 11. 移动文件 12. 移动目录 13. 建立一个可以追加的bufferedwriter 14. 得到一个bufferedreader Java代码    package utils; import java.io.Buffer

c# dbf文件读写类

public class DbfReader     { private string _path; private OleDbConnection _connection; public DbfReader(string dbfPath)         { _path = dbfPath; CheckFile(); } public OleDbDataReader GetReader() { try { _connection.Open(); OleDbCommand command = n

一个Ini文件解析类CIniFileParse

使用方法非常简单,看看源代码就明白了,该类支持Unicode文本. 一个Ini文件解析类CIniFileParse.rar