[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; }}