在学习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");
- }
- }