java——操作文件

Java文件操作,共实现了文件复制(单个文件和多层目录文件),文件移动(单个文件和多层目录文件),文件删除(单个文件和多层目录文件),文件压缩 (单个文件),文件解压(单个文件),文件分割(将一个大文件分割为若干个小文件),文件组合(将多个文件组合到一个文件中)。

package ttstudy.io;   

import java.io.*;   

import java.util.*;   

import java.util.zip.*;   

public class FileManager {   

    private static ArrayList<File> lsFiles = new ArrayList<File>();   

    private static FileInputStream fis = null;   

    private static FileOutputStream fos = null;   

    /**  

     * list all files  

     * @param path  

     * @return ArrayList<File>  

     * @throws FileNotFoundException  

     */  

    public static ArrayList<File> listAllFiles(String path) throws FileNotFoundException {   

        File file = new File(path);   

        File[] f = file.listFiles();   

        for(int i=0; i<f.length; i++) {   

            lsFiles.add(f[i]);   

            //If the current file is a directory, Recursion listed catalogue of the files   

            if(f[i].isDirectory()) {   

                listAllFiles(f[i].getAbsolutePath());   

            }   

        }   

        return lsFiles;   

    }   

    /**  

     * copy srcFile to desFile  

     * @param srcFile  

     * @param desFile  

     * @throws FileNotFoundException  

     */  

    public static void copyFile(String srcFile, String desFile) throws FileNotFoundException, IOException {   

        fis = new FileInputStream(new File(srcFile));   

        fos = new FileOutputStream(new File(desFile));   

        byte[] buf = new byte[1024];   

        int len = 0;   

        while((len=fis.read(buf)) != -1) {   

            fos.write(buf, 0, len);   

        }   

        fos.close();   

        fis.close();   

    }   

    /**  

     * copy all files in srcFile to desFile  

     * @param srcFile  

     * @param desFile  

     * @throws FileNotFoundException  

     */  

    public static void copyFiles(String srcFile, String desFile) throws FileNotFoundException, IOException {   

        ArrayList<File> lsFiles = listAllFiles(srcFile);   

        for(int i=0; i<lsFiles.size(); i++) {   

            File curFile = lsFiles.get(i);   

            if(curFile.isDirectory()) {   

                new File(desFile+curFile.getAbsolutePath().substring(srcFile.length())).mkdir();   

            } else {   

                copyFile(curFile.getAbsolutePath(), new File(desFile+curFile.getAbsolutePath().substring(srcFile.length())).getAbsolutePath());   

            }   

        }   

    }   

    /**  

     * Split a file into multiple files  

     * @param srcFile  

     * @param desDir   分割后文件存放的位置,是一个目录  

     * @param n  

     * @return  

     * @throws FileNotFoundException  

     */  

    public static File[] splitFile(String srcFile, String desDir, int part) throws FileNotFoundException, IOException {   

        File[] rsFile = new File[part];   

        File f = new File(srcFile);   

        long partLen = f.length()/part;     //part等分   

        int perLen = 2;   

        if(partLen > 1024) {   

            perLen = 512;   

        } else {   

            perLen = 2;   

        }   

        byte[] buf = new byte[perLen];   

        fis = new FileInputStream(f);   

        for(int i=0; i<part; i++) {   

            int pos = f.getName().lastIndexOf('.');   

            File partFile = new File(desDir+"/"+f.getName().substring(0, pos)+(i+1)+f.getName().substring(pos));   

            fos = new FileOutputStream(partFile);   

            rsFile[i] = partFile;   

            long m = partLen/perLen;   

            for(int j=0; j<m; j++) {   

                int len = 0;   

                if((len=fis.read(buf)) != -1) {   

                    fos.write(buf, 0, len);   

                }   

            }   

        }   

        //由于整除原因,可能导致最后一部分没有写入到文件中,因此需要补充下面内容   

        int nn= 0;   

        if((nn=fis.read(buf)) != -1) {   

            fos.write(buf, 0, nn);   

        }   

        fos.close();   

        fis.close();   

        return rsFile;   

    }   

    /**  

     * Combination of multiple files into one file  

     * @param srcFile  

     * @param desFile  

     * @return  

     * @throws FileNotFoundException  

     * @throws IOException  

     */  

    public static File mergeFile(File[] srcFile, String desFile) throws FileNotFoundException, IOException {   

        File rsFile = new File(desFile);   

        fos = new FileOutputStream(new File(desFile));   

        byte[] buf = new byte[1024];   

        int len = 0;   

        for(int i=0; i<srcFile.length; i++) {   

            fis = new FileInputStream(srcFile[i]);   

            while((len=fis.read(buf)) != -1) {   

                fos.write(buf, 0, len);   

            }   

            fis.close();   

        }   

        if(fos != null) {   

            fos.close();   

        }   

        if(fis != null) {   

            fis.close();               

        }   

        return rsFile;   

    }   

    /**  

     * delete a file  

     * @param srcFile  

     * @throws FileNotFoundException  

     * @throws IOException  

     */  

    public static void deleteFile(String srcFile) throws FileNotFoundException, IOException {   

        new File(srcFile).delete();   

    }   

    /**  

     * Delete all files in srcFile,This is too difficult for me  

     * @param srcFile  

     * @throws FileNotFoundException  

     * @throws IOException  

     */  

    public static void deleteFiles(String srcFile) throws FileNotFoundException, IOException {   

        LinkedList<File> dirs = new LinkedList<File>();    

        dirs.add(new File(srcFile));   

        while(dirs.size() > 0){   

            File currentDir = (File)dirs.getFirst();   

            File[] files = currentDir.listFiles();   

            boolean emptyDir = true;   

            for(int i = 0 ;i < files.length;i++) {   

                if (files[i].isFile()) {   

                    files[i].delete();   

                } else {   

                    dirs.addFirst(files[i]);   

                    emptyDir = false;   

                }   

            }   

            if (emptyDir){   

                currentDir.delete();   

                dirs.removeFirst();   

            }   

        }   

    }   

    /**  

     * move srcFile to desFile  

     * @param srcFile  

     * @param desFile  

     * @throws FileNotFoundException  

     */  

    public static void moveFile(String srcFile, String desFile) throws FileNotFoundException, IOException {   

        copyFile(srcFile, desFile);   

        new File(srcFile).delete();   

    }   

    /**  

     * move srcFile to desFile  

     * @param srcFile  

     * @param desFile  

     * @throws FileNotFoundException  

     */  

    public static void moveFiles(String srcFile, String desFile) throws FileNotFoundException, IOException {   

        copyFiles(srcFile, desFile);   

        deleteFiles(srcFile);   

    }   

    /**  

     * compress files  

     * @param srcFile  

     * @param rarFile  

     * @throws FileNotFoundException  

     * @throws IOException  

     */  

    public static void compressFile(String _unZipFile, String _zipFile) throws FileNotFoundException, IOException {   

        File srcFile = new File(_unZipFile);   

        File zipFile = new File(_zipFile);   

        DataInputStream dis = new DataInputStream(new FileInputStream(srcFile));   

        if(!zipFile.exists()) {   

            File zipdir = new File(zipFile.getParent());   

            if(!zipdir.exists()) {   

                zipdir.mkdirs();   

            }   

            zipFile.createNewFile();   

        }   

        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile));   

        zos.setMethod(ZipOutputStream.DEFLATED);   

        ZipEntry ze = new ZipEntry(srcFile.getName());   

        zos.putNextEntry(ze);   

        DataOutputStream dos = new DataOutputStream(zos);   

           

        byte[] buf = new byte[2048];   

        int len=0;   

        while((len=dis.read(buf)) != -1) {   

            dos.write(buf, 0, len);   

        }   

        dos.close();   

        dis.close();   

    }   

    /**  

     * uncompress files  

     * @param rarFile  

     * @param srcFile  

     * @throws FileNotFoundException  

     * @throws IOException  

     */  

    @SuppressWarnings("unchecked")   

    public static void unCompressFile(String _zipFile, String _unZipDir) throws FileNotFoundException, IOException {   

        File unZipFile = new File("_unZipFile");   

        if(! unZipFile.exists()) {   

            unZipFile.mkdirs();   

        }   

        ZipEntry ze = null;   

        ZipFile zf = new ZipFile(new File(_zipFile));   

        Enumeration<ZipEntry> en = (Enumeration<ZipEntry>)zf.entries();   

        if(en.hasMoreElements()) {   

            ze = (ZipEntry)en.nextElement();   

        }   

        unZipFile = new File(_unZipDir+File.separator+ze.getName());   

        if(! unZipFile.exists()) {   

            unZipFile.createNewFile();   

        }   

        DataInputStream dis = new DataInputStream(zf.getInputStream(ze));   

        DataOutputStream dos = new DataOutputStream(new FileOutputStream(unZipFile));   

        int len = 0;   

        byte[] buf = new byte[2048];   

        while((len=dis.read(buf)) != -1) {   

            dos.write(buf, 0, len);   

        }   

        dos.close();   

        dis.close();   

    }   

    /**  

     *   

     * @param args  

     */  

    public static void main(String[] args) throws FileNotFoundException, IOException {   

        //          ArrayList<File> lsFiles = listAllFiles("D:/temp");   

        //          for(int i=0; i<lsFiles.size(); i++) {   

        //              System.out.println(lsFiles.get(i).getPath());   

        //          }   

        //          System.out.println(lsFiles.size());   

        //          //copyFile("D:/temp/我的桌面.jpg","D:/temp/test.jpg");   

        //          try {   

        //              copyFiles("D:/temp","D:/tt");   

        //          } catch (IOException e) {   

        //              // TODO Auto-generated catch block   

        //              e.printStackTrace();   

        //          }   

        //          //moveFile("D:/temp/我的桌面.jpg","D:/temp/test.jpg");   

                    //moveFiles("D:/ttt","D:/temp");   

        //          File f = new File("D:/temp/软件0820   9308036    .王颜涛.doc");   

        //          System.out.println(f.getName());   

//      try {   

//          splitFile("D:/temp/tttt.rar", "D:/temp/test", 3);   

//      } catch (IOException e) {   

//          e.printStackTrace();   

//      }   

//      File[] f = {new File("D:/temp/test/tttt1.rar"), new File("D:/temp/test/tttt2.rar"), new File("D:/temp/test/tttt3.rar")};   

//      try {   

//          mergeFile(f, "D:/temp/test.rar");   

//      } catch (IOException e) {   

//          // TODO Auto-generated catch block   

//          e.printStackTrace();   

//      }   

        //deleteFiles("D:/temp/tttt");         

        compressFile("D:/temp/bb.pdf","D:/temp/bb.rar");   

        //unCompressFile("D:/temp/test.rar","D:/temp/test2");   

    }   

}  

 

你可能感兴趣的:(java)