[Java]File文件的新建、删除、修改、搜索的实例方法

来源:互联网 发布:windows 10专业版 编辑:程序博客网 时间:2024/05/20 09:45
    这是前段时间用Java写的一个File文件的操作类,该类中的子方法有文件新建、删除、修改以及文件和文件夹的全级搜索和单级搜索,该类还在完善中,以供学习交流!!
(未完!)
import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Set;import java.util.TreeSet;public class FileOperate {private static FileOperate instance = null;public static FileOperate getInstance() {if (instance == null) {instance = new FileOperate();}return instance;}public FileOperate(){}/**      * 新建目录      * @param folderPath String 如 c:/fqf      * @return boolean      */    public static void newFolder(String folderPath) {        try {            String filePath = folderPath;            filePath = filePath.toString();            java.io.File myFilePath = new java.io.File(filePath);            if (!myFilePath.exists()) {                myFilePath.mkdir();            }        }        catch (Exception e) {            System.out.println("新建目录操作出错");            e.printStackTrace();        }    }    /**      * 新建文件      * @param filePathAndName String 文件路径及名称 如c:/text.txt      * @param fileContent String 文件内容      * @return boolean      */    public static void newFile(String filePathAndName, String fileContent) {        try {            String filePath = filePathAndName;            filePath = filePath.toString();            File myFilePath = new File(filePath);            if (!myFilePath.exists()) {                myFilePath.createNewFile();            }            FileWriter resultFile = new FileWriter(myFilePath);            PrintWriter myFile = new PrintWriter(resultFile);            String strContent = fileContent;            myFile.println(strContent);           resultFile.close();        }        catch (Exception e) {            System.out.println("新建目录操作出错");            e.printStackTrace();        }    }    /**      * 删除文件      * @param filePathAndName String 文件路径及名称 如c:/text.txt      * @param fileContent String      * @return boolean      */    public static void delFile(String filePathAndName) {        try {            String filePath = filePathAndName;            filePath = filePath.toString();            java.io.File myDelFile = new java.io.File(filePath);            myDelFile.delete();        }        catch (Exception e) {            System.out.println("删除文件操作出错");            e.printStackTrace();        }    }    /**      * 删除文件夹      * @param filePathAndName String 文件夹路径及名称 如c:/text      * @param fileContent String      * @return boolean      */    public static void delFolder(String folderPath) {        try {            delAllFile(folderPath); //删除完里面所有内容            String filePath = folderPath;            filePath = filePath.toString();            java.io.File myFilePath = new java.io.File(filePath);            myFilePath.delete(); //删除空文件夹        }        catch (Exception e) {            System.out.println("删除文件夹操作出错");            e.printStackTrace();        }    }    /**      * 删除文件夹里面的所有文件      * @param path String 文件夹路径 如 c:/text      */    public static void delAllFile(String path) {        File file = new File(path);        if (!file.exists()) {            return;        }        if (!file.isDirectory()) {            return;        }        String[] tempList = file.list();        File temp = null;        for (int i = 0; i < tempList.length; i++) {            if (path.endsWith(File.separator)) {                temp = new File(path + tempList[i]);            }            else {                temp = new File(path + File.separator + tempList[i]);            }            if (temp.isFile()) {                temp.delete();            }            if (temp.isDirectory()) {                delAllFile(path+"/"+ tempList[i]);//先删除文件夹里面的文件                delFolder(path+"/"+ tempList[i]);//再删除空文件夹            }        }    }    /**      * 复制单个文件      * @param oldPath String 原文件路径 如:c:/text.txt      * @param newPath String 复制后路径 如:f:/text.txt      * @return boolean      */    public static void copyFile(String oldPath, String newPath) {        try {            int bytesum = 0;            int byteread = 0;            File oldfile = new File(oldPath);            if (oldfile.exists()) { //文件存在时                InputStream inStream = new FileInputStream(oldPath); //读入原文件                FileOutputStream fs = new FileOutputStream(newPath);                byte[] buffer = new byte[1444];                int length;                while ( (byteread = inStream.read(buffer)) != -1) {                    bytesum += byteread; //字节数 文件大小                    System.out.println(bytesum);                    fs.write(buffer, 0, byteread);                }                inStream.close();            }        }        catch (Exception e) {            System.out.println("复制单个文件操作出错");            e.printStackTrace();        }    }    /**      * 复制整个文件夹内容      * @param oldPath String 原文件路径 如:c:/text      * @param newPath String 复制后路径 如:f:/text/ff      * @return boolean      */    public static void copyFolder(String oldPath, String newPath) {        try {            (new File(newPath)).mkdirs(); //如果文件夹不存在 则建立新文件夹            File a=new File(oldPath);            String[] file=a.list();            File temp=null;            for (int i = 0; i < file.length; i++) {                if(oldPath.endsWith(File.separator)){                    temp=new File(oldPath+file[i]);                }                else{                    temp=new File(oldPath+File.separator+file[i]);                }                if(temp.isFile()){                    FileInputStream input = new FileInputStream(temp);                    FileOutputStream output = new FileOutputStream(newPath + "/" +                            (temp.getName()).toString());                    byte[] b = new byte[1024 * 5];                    int len;                    while ( (len = input.read(b)) != -1) {                        output.write(b, 0, len);                    }                    output.flush();                    output.close();                    input.close();                }                if(temp.isDirectory()){//如果是子文件夹                    copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]);                }            }        }        catch (Exception e) {            System.out.println("复制整个文件夹内容操作出错");            e.printStackTrace();        }    }    /**      * 移动文件到指定目录      * @param oldPath String 如:c:/text.txt      * @param newPath String 如:d:/text.txt      */    public static void moveFile(String oldPath, String newPath) {        copyFile(oldPath, newPath);        delFile(oldPath);    }    /**      * 移动文件夹到指定目录      * @param oldPath String 如:c:/text.txt      * @param newPath String 如:d:/text.txt      */    public static void moveFolder(String oldPath, String newPath) {        copyFolder(oldPath, newPath);        delFolder(oldPath);    }      /**    * 删除文件中特定内容(txt)    * @param filePath String 如:c:/text.txt     * @param delContent String 如:"123456"    */   public static void delFileConcent(String filePath,String delContent) {   try {    BufferedReader br = new BufferedReader(new FileReader(filePath));   String rowtxt = null;           List < String > list = new ArrayList < String > ();           while ((rowtxt = br.readLine()) != null) {               if (rowtxt != null && !"".equals(rowtxt) && !"null".equals(rowtxt)) {               rowtxt=rowtxt.replace(delContent, "");                   list.add(rowtxt);               }           }           filePath = filePath.toString();            File myFilePath = new File(filePath);            if (!myFilePath.exists()) {            myFilePath.createNewFile();            }            FileWriter resultFile = new FileWriter(myFilePath);            PrintWriter myFile = new PrintWriter(resultFile);            String strContent = "";           for(int i = 0;i < list.size(); i++){           strContent = list.get(i);           if(!"<<<*>>>".equals(strContent)){           myFile.println(strContent);                      }           }           resultFile.close();        }        catch (Exception e) {            System.out.println("操作出错");            e.printStackTrace();        }       }      /**    * 修改文件内容    * @param filePath 文件地址    * @param oldContent 修改前内容 String    * @param newContent 修改后内容 String    */   public static void updateFileConcent(String filePath,String oldContent,String newContent) {   try {    BufferedReader br = new BufferedReader(new FileReader(filePath));   String rowtxt = null;           while ((rowtxt = br.readLine()) != null) {               if (rowtxt != null && !"".equals(rowtxt) && !"null".equals(rowtxt)) {               rowtxt=rowtxt.replace(oldContent, newContent);               }           }       }        catch (Exception e) {            System.out.println("修改操作出错");            e.printStackTrace();        }    }      /**    * 删除文件夹中文件(txt)    * @param folderPath String 如:c:/text    * @param delContent String 如:"123456"    */   public static void delFolderConcent(String folderPath,String delContent) {   File file=new File(folderPath);       if(file!=null){           if(file.isDirectory()){               File fi[]=file.listFiles();               if(fi!=null){               for(int i=0;i<fi.length;i++){                   if(fi[i].isDirectory()){                   delFolderConcent(folderPath, null);                   }else{               try {                   RandomAccessFile  read=new RandomAccessFile(fi[i], "r");                   String line1=read.readLine();                     if(line1.indexOf(delContent)==-1){                           fi[i].deleteOnExit();                      }                   System.out.println(line1);                   read.close();                                  } catch (Exception e) {               System.out.println("操作出错");                    e.printStackTrace();               }                   }               }               }else{               System.out.println(file);               }          }       }         }      /**    * 全级搜索文件列表    * @param Path 文件位置 如:F:\\text\\ * @return     */   public static List searchAllFile(String Path){   Set fileNameSet = FileOperate.searchFolder(Path);       // 符合条件的文件路径       List resultFile=new ArrayList();              TreeSet treeSet = new TreeSet(fileNameSet);       for(Iterator i = treeSet.iterator(); i.hasNext();) {           String filePath = i.next().toString();           filePath = filePath.replaceAll("\\\\", "\\\\\\\\");           resultFile.add(filePath);                }       return resultFile;   }      /**    * 单级搜索文件列表    * @param folderPath 文件位置 如 F:\\text\\    * @return    */   public static HashSet searchFolder(String folderPath){   File file = new File(folderPath);   List fileList = listAllFiles(file);   HashSet fileName = new HashSet(fileList.size());   for(int i = 0; i < fileList.size();i++){   File file2 = (File) fileList.get(i);   boolean add = fileName.add(file2.getAbsolutePath());   }   return fileName;      }      /**    * 搜索文件子方法    * searchFolder 方法的附属方法     * @param directory    * @return     */   private static List listAllFiles(File directory) {       if(directory == null || !directory.isDirectory()) {           return null;       }       List fileList = new ArrayList();       addSubFileList(directory, fileList);       return fileList;   }   /**    * 搜索文件子方法    * searchFolder 方法的附属方法     * @param file     * @param fileList    */   private static void addSubFileList(File file, List fileList) {       File[] subFileArray = file.listFiles();       if(subFileArray == null || subFileArray.length == 0) {           return;       }       for(int i = 0; i < subFileArray.length; i++) {           File subFile = subFileArray[i];           if(subFile == null) {               continue;           }           if(subFile.isFile()) {               fileList.add(subFile);               continue;           }else if(subFile.isDirectory()) {               addSubFileList(subFile, fileList);           }       }   }               /**    * 全级搜索文件及内容列表p    * @param Path 文件位置 如:F:\\text\\ * @return     */   public static List searchAllFileAndContext(String Path){       String content = "";// 某个文件的内容          String encoding = "utf8";// 设置读取文件内容时的文件编码   Set fileNameSet = FileOperate.searchFolder(Path);       // 符合条件的文件路径       List resultFile=new ArrayList();              TreeSet treeSet = new TreeSet(fileNameSet);       for(Iterator i = treeSet.iterator(); i.hasNext();) {           String filePath = i.next().toString();           filePath = filePath.replaceAll("\\\\", "\\\\\\\\");//           System.out.println(filePath);           try {           String lastName = filePath.substring(filePath.lastIndexOf(".")+1);                if(lastName.indexOf("txt")!=-1){           content = SearchStr.readTxt(filePath, encoding);           //           System.out.println("文件里面的内容:");//           System.out.println(content);           }           if(!"".equals(content)){           resultFile.add(filePath+"\n文件里面的内容:\n"+content);           }else{           resultFile.add(filePath);           }           }catch(IOException e) {               e.printStackTrace();           }       }       return resultFile;   }}

原创粉丝点击