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"); } }
转载自http://blog.csdn.net/tsyj810883979/article/details/6522065