apache的FileUtils方法大全

时间:2023-03-08 16:43:33

FileUtils

获取系统的临时目录路径:getTempDirectoryPath()

  1. public static String getTempDirectoryPath() {
  2. return System.getProperty("java.io.tmpdir");
  3. }

获取代表系统临时目录的文件:getTempDirectory ()

  1. public static File getTempDirectory() {
  2. return new File(getTempDirectoryPath());
  3. }

获取用户的主目录路径:getUserDirectoryPath()

  1. public static String getUserDirectoryPath() {
  2. return System.getProperty("user.home");
  3. }

获取代表用户主目录的文件:getUserDirectory()

  1. public static File getUserDirectory() {
  2. return new File(getUserDirectoryPath());
  3. }

根据指定的文件获取一个新的文件输入流:openInputStream(File file)

  1. public static FileInputStream openInputStream(File file) throws IOException {
  2. if (file.exists()) {
  3. if (file.isDirectory()) {
  4. throw new IOException("File '" + file + "' exists but is adirectory");
  5. }
  6. if (file.canRead() == false) {
  7. throw new IOException("File '" + file + "' cannot be read");
  8. }
  9. } else {
  10. throw newFileNotFoundException("File '" + file + "' does notexist");
  11. }
  12. return new FileInputStream(file);
  13. }

根据指定的文件获取一个新的文件输出流:openOutputStream (File file)

  1. public static FileOutputStream openOutputStream(File file) throws IOException {
  2. if (file.exists()) {
  3. if (file.isDirectory()) {
  4. throw new IOException("File'" + file + "' exists but is a directory");
  5. }
  6. if (file.canWrite() == false) {
  7. throw new IOException("File '" + file + "' cannot be written to");
  8. }
  9. } else {
  10. File parent = file.getParentFile();
  11. if (parent != null &&parent.exists() == false) {
  12. if (parent.mkdirs() ==false) {
  13. throw new IOException("File '" + file + "' could not be created");
  14. }
  15. }
  16. }
  17. return new FileOutputStream(file);
  18. }

字节转换成直观带单位的值(包括单位GB,MB,KB或字节)byteCountToDisplaySize(long size)

  1. public static StringbyteCountToDisplaySize(long size) {
  2. String displaySize;
  3. ) {
  4. displaySize =String.valueOf(size / ONE_GB) + " GB";
  5. ) {
  6. displaySize =String.valueOf(size / ONE_MB) + " MB";
  7. ) {
  8. displaySize =String.valueOf(size / ONE_KB) + " KB";
  9. } else {
  10. displaySize =String.valueOf(size) + " bytes";
  11. }
  12. return displaySize;
  13. }

创建一个空文件,若文件应经存在则只更改文件的最近修改时间:touch(File file)

  1. public static void touch(File file) throws IOException {
  2. if (!file.exists()) {
  3. OutputStream out =openOutputStream(file);
  4. IOUtils.closeQuietly(out);
  5. }
  6. boolean success =file.setLastModified(System.currentTimeMillis());
  7. if (!success) {
  8. throw new IOException("Unableto set the last modification time for " + file);
  9. }
  10. }

把相应的文件集合转换成文件数组convertFileCollectionToFileArray(Collection<File> files)

  1. public static File[] convertFileCollectionToFileArray(Collection<File> files) {
  2. return files.toArray(newFile[files.size()]);
  3. }

根据一个过滤规则获取一个目录下的文件innerListFiles(Collection<File> files, File directory,IOFileFilterfilter)

  1. private static void innerListFiles(Collection<File> files, File directory,
  2. IOFileFilter filter) {
  3. File[] found =directory.listFiles((FileFilter) filter);
  4. if (found != null) {
  5. for (File file : found) {
  6. if (file.isDirectory()) {
  7. innerListFiles(files,file, filter);
  8. } else {
  9. files.add(file);
  10. }
  11. }
  12. }
  13. }

根据一个IOFileFilter过滤规则获取一个目录下的文件集合listFiles( File directory, IOFileFilterfileFilter, IOFileFilter dirFilter)

  1. public static Collection<File> listFiles(
  2. File directory, IOFileFilterfileFilter, IOFileFilter dirFilter) {
  3. if (!directory.isDirectory()) {
  4. throw newIllegalArgumentException(
  5. "Parameter'directory' is not a directory");
  6. }
  7. if (fileFilter == null) {
  8. throw newNullPointerException("Parameter 'fileFilter' is null");
  9. }
  10. //Setup effective file filter
  11. IOFileFilter effFileFilter =FileFilterUtils.and(fileFilter,
  12. FileFilterUtils.notFileFilter(DirectoryFileFilter.INSTANCE));
  13. //Setup effective directory filter
  14. IOFileFilter effDirFilter;
  15. if (dirFilter == null) {
  16. effDirFilter =FalseFileFilter.INSTANCE;
  17. } else {
  18. effDirFilter =FileFilterUtils.and(dirFilter,
  19. DirectoryFileFilter.INSTANCE);
  20. }
  21. //Find files
  22. Collection<File> files = newjava.util.LinkedList<File>();
  23. innerListFiles(files, directory,
  24. FileFilterUtils.or(effFileFilter, effDirFilter));
  25. return files;
  26. }

根据一个IOFileFilter过滤规则获取一个目录下的文件集合的Iterator迭代器iterateFiles( File directory, IOFileFilterfileFilter, IOFileFilter dirFilter)

  1. public static Iterator<File> iterateFiles( File directory, IOFileFilterfileFilter, IOFileFilter dirFilter) {
  2. return listFiles(directory,fileFilter, dirFilter).iterator();
  3. }

把指定的字符串数组变成后缀名格式字符串数组toSuffixes(String[] extensions)

  1. private static String[] toSuffixes(String[] extensions) {
  2. String[] suffixes = new String[extensions.length];
  3. ; i <extensions.length; i++) {
  4. suffixes[i] = "." +extensions[i];
  5. }
  6. return suffixes;
  7. }

查找一个目录下面符合对应扩展名的文件的集合listFiles(File directory, String[]extensions, boolean recursive)

  1. public static Collection<File> listFiles( File directory, String[]extensions, boolean recursive) {
  2. IOFileFilter filter;
  3. if (extensions == null) {
  4. filter =TrueFileFilter.INSTANCE;
  5. } else {
  6. String[] suffixes =toSuffixes(extensions);
  7. filter = newSuffixFileFilter(suffixes);
  8. }
  9. return listFiles(directory, filter,
  10. (recursive ?TrueFileFilter.INSTANCE : FalseFileFilter.INSTANCE));
  11. }

查找一个目录下面符合对应扩展名的文件的集合的迭代器Iterator<File> iterateFiles( File directory, String[]extensions, boolean recursive)

  1. public static Iterator<File> iterateFiles( File directory, String[]extensions, boolean recursive) {
  2. return listFiles(directory,extensions, recursive).iterator();
  3. }

判断两个文件是否相等contentEquals(Filefile1, File file2)

  1. public static boolean contentEquals(File file1, File file2) throws IOException {
  2. boolean file1Exists =file1.exists();
  3. if (file1Exists != file2.exists()) {
  4. return false;
  5. }
  6. if (!file1Exists) {
  7. // two not existing files areequal
  8. return true;
  9. }
  10. if (file1.isDirectory() ||file2.isDirectory()) {
  11. // don't want to comparedirectory contents
  12. throw new IOException("Can't compare directories, only files");
  13. }
  14. if (file1.length() !=file2.length()) {
  15. // lengths differ, cannot beequal
  16. return false;
  17. }
  18. if(file1.getCanonicalFile().equals(file2.getCanonicalFile())) {
  19. // same file
  20. return true;
  21. }
  22. InputStream input1 = null;
  23. InputStream input2 = null;
  24. try {
  25. input1 = newFileInputStream(file1);
  26. input2 = newFileInputStream(file2);
  27. returnIOUtils.contentEquals(input1, input2);
  28. } finally {
  29. IOUtils.closeQuietly(input1);
  30. IOUtils.closeQuietly(input2);
  31. }
  32. }

根据一个Url来创建一个文件toFile(URL url)

  1. public static File toFile(URL url) {
  2. if (url == null ||!"file".equalsIgnoreCase(url.getProtocol())) {
  3. return null;
  4. } else {
  5. String filename =url.getFile().replace('/', File.separatorChar);
  6. filename = decodeUrl(filename);
  7. return new File(filename);
  8. }
  9. }

对一个Url字符串进行将指定的URL按照RFC 3986进行转换decodeUrl(Stringurl)

  1. static String decodeUrl(String url) {
  2. String decoded = url;
  3. ) {
  4. int n = url.length();
  5. StringBuffer buffer = newStringBuffer();
  6. ByteBuffer bytes =ByteBuffer.allocate(n);
  7. ; i < n;) {
  8. if (url.charAt(i) == '%') {
  9. try {
  10. do {
  11. , i + 3), 16);
  12. bytes.put(octet);
  13. ;
  14. } while (i < n&& url.charAt(i) == '%');
  15. continue;
  16. } catch(RuntimeException e) {
  17. // malformedpercent-encoded octet, fall through and
  18. // append charactersliterally
  19. } finally {
  20. ) {
  21. bytes.flip();
  22. buffer.append(UTF8.decode(bytes).toString());
  23. bytes.clear();
  24. }
  25. }
  26. }
  27. buffer.append(url.charAt(i++));
  28. }
  29. decoded = buffer.toString();
  30. }
  31. return decoded;
  32. }

将一个URL数组转化成一个文件数组toFiles(URL[] urls)

  1. public static File[]  toFiles(URL[] urls) {
  2. ) {
  3. return EMPTY_FILE_ARRAY;
  4. }
  5. File[] files = newFile[urls.length];
  6. ; i < urls.length;i++) {
  7. URL url = urls[i];
  8. if (url != null) {
  9. if(url.getProtocol().equals("file") == false) {
  10. throw newIllegalArgumentException(
  11. "URL couldnot be converted to a File: " + url);
  12. }
  13. files[i] = toFile(url);
  14. }
  15. }
  16. return files;
  17. }

将一个文件数组转化成一个URL数组toURLs(File[] files)

  1. public static URL[]   toURLs(File[] files)throws IOException {
  2. URL[] urls = new URL[files.length];
  3. ; i < urls.length;i++) {
  4. urls[i] =files[i].toURI().toURL();
  5. }
  6. return urls;
  7. }

拷贝一个文件到指定的目录文件copyFileToDirectory(File srcFile, File destDir)

  1. public static void copyFileToDirectory(File srcFile, File destDir) throws IOException{
  2. copyFileToDirectory(srcFile,destDir, true);
  3. }

拷贝一个文件到指定的目录文件并且设置是否更新文件的最近修改时间copyFileToDirectory(File srcFile, File destDir, booleanpreserveFileDate)

  1. public static void copyFileToDirectory(File srcFile, File destDir, booleanpreserveFileDate) throws IOException {
  2. if (destDir == null) {
  3. throw new NullPointerException("Destination must not be null");
  4. }
  5. if (destDir.exists() &&destDir.isDirectory() == false) {
  6. throw new IllegalArgumentException("Destination '" + destDir + "' is not adirectory");
  7. }
  8. File destFile = new File(destDir,srcFile.getName());
  9. copyFile(srcFile, destFile,preserveFileDate);
  10. }

拷贝文件到新的文件中并且保存最近修改时间copyFile(File srcFile, File destFile)

  1. public static void copyFile(File srcFile, File destFile) throws IOException {
  2. copyFile(srcFile, destFile, true);
  3. }

拷贝文件到新的文件中并且设置是否保存最近修改时间copyFile(File srcFile, File destFile,boolean preserveFileDate)

  1. public static void copyFile(File srcFile, File destFile,boolean preserveFileDate) throwsIOException {
  2. if (srcFile == null) {
  3. throw new NullPointerException("Source must not be null");
  4. }
  5. if (destFile == null) {
  6. throw new NullPointerException("Destination must not be null");
  7. }
  8. if (srcFile.exists() == false) {
  9. throw new FileNotFoundException("Source '" + srcFile + "' does notexist");
  10. }
  11. if (srcFile.isDirectory()) {
  12. throw new IOException("Source '" + srcFile + "' exists but is adirectory");
  13. }
  14. if(srcFile.getCanonicalPath().equals(destFile.getCanonicalPath())) {
  15. throw new IOException("Source '" + srcFile + "' and destination '" +destFile + "' are the same");
  16. }
  17. if (destFile.getParentFile() != null&& destFile.getParentFile().exists() == false) {
  18. if(destFile.getParentFile().mkdirs() == false) {
  19. throw new IOException("Destination '" + destFile + "' directory cannot becreated");
  20. }
  21. }
  22. if (destFile.exists() &&destFile.canWrite() == false) {
  23. throw new IOException("Destination '" + destFile + "' exists but isread-only");
  24. }
  25. doCopyFile(srcFile, destFile,preserveFileDate);
  26. }

拷贝文件到新的文件中并且设置是否保存最近修改时间doCopyFile(File srcFile, File destFile, boolean preserveFileDate)

  1. private static void doCopyFile(File srcFile,File destFile, boolean preserveFileDate) throws IOException {
  2. if (destFile.exists() &&destFile.isDirectory()) {
  3. throw new IOException("Destination '" + destFile + "' exists but is adirectory");
  4. }
  5. FileInputStream fis = null;
  6. FileOutputStream fos = null;
  7. FileChannel input = null;
  8. FileChannel output = null;
  9. try {
  10. fis = newFileInputStream(srcFile);
  11. fos = newFileOutputStream(destFile);
  12. input  = fis.getChannel();
  13. output = fos.getChannel();
  14. long size = input.size();
  15. ;
  16. ;
  17. while (pos < size) {
  18. count = (size - pos) >FIFTY_MB ? FIFTY_MB : (size - pos);
  19. pos +=output.transferFrom(input, pos, count);
  20. }
  21. } finally {
  22. IOUtils.closeQuietly(output);
  23. IOUtils.closeQuietly(fos);
  24. IOUtils.closeQuietly(input);
  25. IOUtils.closeQuietly(fis);
  26. }
  27. if (srcFile.length() !=destFile.length()) {
  28. throw new IOException("Failed to copy full contents from '" +
  29. srcFile + "' to '"+ destFile + "'");
  30. }
  31. if (preserveFileDate) {
  32. destFile.setLastModified(srcFile.lastModified());
  33. }
  34. }

将一个目录拷贝到另一目录中,并且保存最近更新时间copyDirectoryToDirectory(File srcDir, File destDir)

  1. public static void copyDirectoryToDirectory(File srcDir, File destDir) throws IOException {
  2. if (srcDir == null) {
  3. throw new NullPointerException("Source must not be null");
  4. }
  5. if (srcDir.exists() &&srcDir.isDirectory() == false) {
  6. throw new IllegalArgumentException("Source'" + destDir + "' is not a directory");
  7. }
  8. if (destDir == null) {
  9. throw new NullPointerException("Destination must not be null");
  10. }
  11. if (destDir.exists() &&destDir.isDirectory() == false) {
  12. throw new IllegalArgumentException("Destination '" + destDir + "' is not adirectory");
  13. }
  14. copyDirectory(srcDir, newFile(destDir, srcDir.getName()), true);
  15. }

拷贝整个目录到新的位置,并且保存最近修改时间copyDirectory(File srcDir, File destDir)

  1. public static void copyDirectory(File srcDir, File destDir) throws IOException{
  2. copyDirectory(srcDir, destDir,true);
  3. }

拷贝整个目录到新的位置,并且设置是否保存最近修改时间copyDirectory(File srcDir, File destDir, boolean preserveFileDate)

  1. public static void copyDirectory(File srcDir, File destDir, boolean preserveFileDate) throws IOException {
  2. copyDirectory(srcDir, destDir, null,preserveFileDate);
  3. }

拷贝过滤后的目录到指定的位置,并且保存最近修改时间copyDirectory(File srcDir, File destDir, FileFilter filter)

  1. public static void copyDirectory(File srcDir, File destDir, FileFilter filter) throws IOException {
  2. copyDirectory(srcDir, destDir,filter, true);
  3. }

拷贝过滤后的目录到指定的位置,并且设置是否保存最近修改时间copyDirectory(File srcDir, File destDir,FileFilter filter, booleanpreserveFileDate)

  1. public static void copyDirectory(File srcDir, File destDir,FileFilter filter, booleanpreserveFileDate) throws IOException {
  2. if (srcDir == null) {
  3. throw new NullPointerException("Source must not be null");
  4. }
  5. if (destDir == null) {
  6. throw new NullPointerException("Destination must not be null");
  7. }
  8. if (srcDir.exists() == false) {
  9. throw new FileNotFoundException("Source '" + srcDir + "' does notexist");
  10. }
  11. if (srcDir.isDirectory() == false){
  12. throw new IOException("Source '" + srcDir + "' exists but is not adirectory");
  13. }
  14. if(srcDir.getCanonicalPath().equals(destDir.getCanonicalPath())) {
  15. throw new IOException("Source '" + srcDir + "' and destination '" +destDir + "' are the same");
  16. }
  17. // Cater for destination being directorywithin the source directory (see IO-141)
  18. List<String> exclusionList =null;
  19. if(destDir.getCanonicalPath().startsWith(srcDir.getCanonicalPath())) {
  20. File[] srcFiles = filter ==null ? srcDir.listFiles() : srcDir.listFiles(filter);
  21. ) {
  22. exclusionList = newArrayList<String>(srcFiles.length);
  23. for (File srcFile :srcFiles) {
  24. File copiedFile = new File(destDir, srcFile.getName());
  25. exclusionList.add(copiedFile.getCanonicalPath());
  26. }
  27. }
  28. }
  29. doCopyDirectory(srcDir, destDir,filter, preserveFileDate, exclusionList);
  30. }

内部拷贝目录的方法doCopyDirectory(FilesrcDir, File destDir, FileFilter filter, boolean preserveFileDate,List<String> exclusionList)

  1. private static void doCopyDirectory(File srcDir, File destDir, FileFilter filter,boolean preserveFileDate,List<String> exclusionList) throws IOException {
  2. // recurse
  3. File[] files = filter == null ?srcDir.listFiles() : srcDir.listFiles(filter);
  4. if (files == null) {  // null if security restricted
  5. throw new IOException("Failed to list contents of " + srcDir);
  6. }
  7. if (destDir.exists()) {
  8. if (destDir.isDirectory() ==false) {
  9. throw new IOException("Destination '" + destDir + "' exists but is not adirectory");
  10. }
  11. } else {
  12. if (destDir.mkdirs() == false){
  13. throw new IOException("Destination '" + destDir + "' directory cannot becreated");
  14. }
  15. }
  16. if (destDir.canWrite() == false) {
  17. throw new IOException("Destination '" + destDir + "' cannot be writtento");
  18. }
  19. for (File file : files) {
  20. File copiedFile = newFile(destDir, file.getName());
  21. if (exclusionList == null ||!exclusionList.contains(file.getCanonicalPath())) {
  22. if (file.isDirectory()) {
  23. doCopyDirectory(file,copiedFile, filter, preserveFileDate, exclusionList);
  24. } else {
  25. doCopyFile(file,copiedFile, preserveFileDate);
  26. }
  27. }
  28. }
  29. // Do this last, as the above hasprobably affected directory metadata
  30. if (preserveFileDate) {
  31. destDir.setLastModified(srcDir.lastModified());
  32. }
  33. }

根据一个Url拷贝字节到一个文件中copyURLToFile(URL source, File destination)

  1. public static void copyURLToFile(URL source, File destination) throws IOException {
  2. InputStream input =source.openStream();
  3. copyInputStreamToFile(input,destination);
  4. }

根据一个Url拷贝字节到一个文件中,并且可以设置连接的超时时间和读取的超时时间

copyURLToFile(URLsource, File destination, int connectionTimeout, int readTimeout)

  1. public static void copyURLToFile(URL source, File destination,int connectionTimeout, int readTimeout)throws IOException {
  2. URLConnection connection =source.openConnection();
  3. connection.setConnectTimeout(connectionTimeout);
  4. connection.setReadTimeout(readTimeout);
  5. InputStream input =connection.getInputStream();
  6. copyInputStreamToFile(input,destination);
  7. }

拷贝一个字节流到一个文件中,如果这个文件不存在则新创建一个,存在的话将被重写进内容copyInputStreamToFile(InputStream source, File destination)

  1. public static voidcopyInputStreamToFile(InputStream source, File destination) throws IOException{
  2. try {
  3. FileOutputStream output =openOutputStream(destination);
  4. try {
  5. IOUtils.copy(source,output);
  6. } finally {
  7. IOUtils.closeQuietly(output);
  8. }
  9. } finally {
  10. IOUtils.closeQuietly(source);
  11. }
  12. }

递归的删除一个目录deleteDirectory(Filedirectory)

  1. public static void deleteDirectory(File directory) throws IOException {
  2. if (!directory.exists()) {
  3. return;
  4. }
  5. if (!isSymlink(directory)) {
  6. cleanDirectory(directory);
  7. }
  8. if (!directory.delete()) {
  9. String message =
  10. "Unable to deletedirectory " + directory + ".";
  11. throw new IOException(message);
  12. }
  13. }

安静模式删除目录,操作过程中会抛出异常deleteQuietly(File file)

  1. public static boolean deleteQuietly(File file) {
  2. if (file == null) {
  3. return false;
  4. }
  5. try {
  6. if (file.isDirectory()) {
  7. cleanDirectory(file);
  8. }
  9. } catch (Exception ignored) {
  10. }
  11. try {
  12. return file.delete();
  13. } catch (Exception ignored) {
  14. return false;
  15. }
  16. }

清除一个目录而不删除它cleanDirectory(Filedirectory)

  1. public static void cleanDirectory(File directory) throws IOException {
  2. if (!directory.exists()) {
  3. String message = directory +" does not exist";
  4. throw new IllegalArgumentException(message);
  5. }
  6. if (!directory.isDirectory()) {
  7. String message = directory +" is not a directory";
  8. throw new IllegalArgumentException(message);
  9. }
  10. File[] files =directory.listFiles();
  11. if (files == null) {  // null if security restricted
  12. throw new IOException("Failed to list contents of " + directory);
  13. }
  14. IOException exception = null;
  15. for (File file : files) {
  16. try {
  17. forceDelete(file);
  18. } catch (IOException ioe) {
  19. exception = ioe;
  20. }
  21. }
  22. if (null != exception) {
  23. throw exception;
  24. }
  25. }

等待NFS来传播一个文件的创建,实施超时waitFor(File file, int seconds)

  1. public static boolean waitFor(File file, int seconds) {
  2. ;
  3. ;
  4. while (!file.exists()) {
  5. ) {
  6. ;
  7. if (timeout++ > seconds){
  8. return false;
  9. }
  10. }
  11. try {
  12. );
  13. } catch (InterruptedExceptionignore) {
  14. // ignore exception
  15. } catch (Exception ex) {
  16. break;
  17. }
  18. }
  19. return true;
  20. }

把一个文件的内容读取到一个对应编码的字符串中去readFileToString(File file, String encoding)

  1. public static String readFileToString(Filefile, String encoding) throws IOException {
  2. InputStream in = null;
  3. try {
  4. in = openInputStream(file);
  5. return IOUtils.toString(in,encoding);
  6. } finally {
  7. IOUtils.closeQuietly(in);
  8. }
  9. }

读取文件的内容到虚拟机的默认编码字符串readFileToString(File file)

  1. public static String readFileToString(Filefile) throws IOException {
  2. return readFileToString(file,null);
  3. }

把一个文件转换成字节数组返回readFileToByteArray(File file)

  1. public static byte[] readFileToByteArray(Filefile) throws IOException {
  2. InputStream in = null;
  3. try {
  4. in = openInputStream(file);
  5. return IOUtils.toByteArray(in);
  6. } finally {
  7. IOUtils.closeQuietly(in);
  8. }
  9. }

把文件中的内容逐行的拷贝到一个对应编码的list<String>中去

  1. public static List<String> readLines(File file, String encoding) throws IOException {
  2. InputStream in = null;
  3. try {
  4. in = openInputStream(file);
  5. return IOUtils.readLines(in,encoding);
  6. } finally {
  7. IOUtils.closeQuietly(in);
  8. }
  9. }

把文件中的内容逐行的拷贝到一个虚拟机默认编码的list<String>中去

  1. public static List<String>readLines(File file) throws IOException {
  2. return readLines(file, null);
  3. }

根据对应编码返回对应文件内容的行迭代器lineIterator(File file, String encoding)

  1. public static LineIterator lineIterator(File file, String encoding) throws IOException{
  2. InputStream in = null;
  3. try {
  4. in = openInputStream(file);
  5. return IOUtils.lineIterator(in,encoding);
  6. } catch (IOException ex) {
  7. IOUtils.closeQuietly(in);
  8. throw ex;
  9. } catch (RuntimeException ex) {
  10. IOUtils.closeQuietly(in);
  11. throw ex;
  12. }
  13. }

根据虚拟机默认编码返回对应文件内容的行迭代器lineIterator(File file)

  1. public static LineIterator lineIterator(Filefile) throws IOException {
  2. return lineIterator(file, null);
  3. }

根据对应编码把字符串写进对应的文件中writeStringToFile(File file, String data, String encoding)

  1. public static void writeStringToFile(File file, String data, String encoding) throws IOException {
  2. OutputStream out = null;
  3. try {
  4. out = openOutputStream(file);
  5. IOUtils.write(data, out,encoding);
  6. } finally {
  7. IOUtils.closeQuietly(out);
  8. }
  9. }

根据虚拟机默认编码把字符串写进对应的文件中writeStringToFile(File file, String data)

  1. public static void writeStringToFile(Filefile, String data) throws IOException {
  2. writeStringToFile(file, data,null);
  3. }

根据虚拟机默认的编码把CharSequence写入到文件中(File file, CharSequence data)

  1. public static void write(File file, CharSequence data) throws IOException {
  2. String str = data == null ? null :data.toString();
  3. writeStringToFile(file, str);
  4. }

根据对应的编码把CharSequence写入到文件中write(File file, CharSequence data, String encoding)

  1. public static void write(File file, CharSequence data, String encoding) throws IOException {
  2. String str = data == null ? null :data.toString();
  3. writeStringToFile(file, str,encoding);
  4. }

把一个字节数组写入到指定的文件中writeByteArrayToFile(File file, byte[] data)

  1. public static void writeByteArrayToFile(Filefile, byte[] data) throws IOException {
  2. OutputStream out = null;
  3. try {
  4. out = openOutputStream(file);
  5. out.write(data);
  6. } finally {
  7. IOUtils.closeQuietly(out);
  8. }
  9. }

把集合中的内容根据对应编码逐项插入到文件中writeLines(File file, String encoding, Collection<?> lines)

  1. public static void writeLines(File file,String encoding, Collection<?> lines) throws IOException {
  2. writeLines(file, encoding, lines,null);
  3. }

把集合中的内容根据虚拟机默认编码逐项插入到文件中writeLines(File file, Collection<?> lines)

  1. public static void writeLines(File file, Collection<?> lines) throws IOException{
  2. writeLines(file, null, lines,null);
  3. }

把集合中的内容根据对应字符编码和行编码逐项插入到文件中

  1. public static void writeLines(File file,String encoding, Collection<?> lines, String lineEnding)
  2. throws IOException {
  3. OutputStream out = null;
  4. try {
  5. out = openOutputStream(file);
  6. IOUtils.writeLines(lines,lineEnding, out, encoding);
  7. } finally {
  8. IOUtils.closeQuietly(out);
  9. }
  10. }

把集合中的内容根据对应行编码逐项插入到文件中

  1. public static void writeLines(File file, Collection<?> lines, String lineEnding)throws IOException {
  2. writeLines(file, null, lines,lineEnding);
  3. }

删除一个文件,如果是目录则递归删除forceDelete(File file)

  1. public static void forceDelete(File file)throws IOException {
  2. if (file.isDirectory()) {
  3. deleteDirectory(file);
  4. } else {
  5. boolean filePresent =file.exists();
  6. if (!file.delete()) {
  7. if (!filePresent){
  8. throw new FileNotFoundException("File does not exist: " + file);
  9. }
  10. String message =
  11. "Unable to deletefile: " + file;
  12. throw new IOException(message);
  13. }
  14. }
  15. }

当虚拟机退出关闭时删除文件forceDeleteOnExit(File file)

  1. public static void forceDeleteOnExit(File file) throws IOException {
  2. if (file.isDirectory()) {
  3. deleteDirectoryOnExit(file);
  4. } else {
  5. file.deleteOnExit();
  6. }
  7. }

当虚拟机退出关闭时递归删除一个目录deleteDirectoryOnExit(File directory)

  1. private static void deleteDirectoryOnExit(File directory) throws IOException {
  2. if (!directory.exists()) {
  3. return;
  4. }
  5. if (!isSymlink(directory)) {
  6. cleanDirectoryOnExit(directory);
  7. }
  8. directory.deleteOnExit();
  9. }

在虚拟机退出或者关闭时清除一个目录而不删除它

  1. private static void cleanDirectoryOnExit(Filedirectory) throws IOException {
  2. if (!directory.exists()) {
  3. String message = directory +" does not exist";
  4. throw new IllegalArgumentException(message);
  5. }
  6. if (!directory.isDirectory()) {
  7. String message = directory +" is not a directory";
  8. throw new IllegalArgumentException(message);
  9. }
  10. File[] files =directory.listFiles();
  11. if (files == null) {  // null if security restricted
  12. throw new IOException("Failed to list contents of " + directory);
  13. }
  14. IOException exception = null;
  15. for (File file : files) {
  16. try {
  17. forceDeleteOnExit(file);
  18. } catch (IOException ioe) {
  19. exception = ioe;
  20. }
  21. }
  22. if (null != exception) {
  23. throw exception;
  24. }
  25. }

创建一个目录除了不存在的父目录其他所必须的都可以创建forceMkdir(File directory)

  1. public static void forceMkdir(File directory) throws IOException {
  2. if (directory.exists()) {
  3. if (!directory.isDirectory()) {
  4. String message =
  5. "File "
  6. + directory
  7. + " exists andis "
  8. + "not adirectory. Unable to create directory.";
  9. throw new IOException(message);
  10. }
  11. } else {
  12. if (!directory.mkdirs()) {
  13. // Double-check that someother thread or process hasn't made
  14. // the directory in thebackground
  15. if (!directory.isDirectory())
  16. {
  17. String message =
  18. "Unable tocreate directory " + directory;
  19. throw new IOException(message);
  20. }
  21. }
  22. }
  23. }

获取文件或者目录的大小sizeOf(Filefile)

  1. public static long sizeOf(File file) {
  2. if (!file.exists()) {
  3. String message = file + "does not exist";
  4. throw new IllegalArgumentException(message);
  5. }
  6. if (file.isDirectory()) {
  7. return sizeOfDirectory(file);
  8. } else {
  9. return file.length();
  10. }
  11. }

获取目录的大小sizeOfDirectory(Filedirectory)

  1. public static long sizeOfDirectory(File directory) {
  2. if (!directory.exists()) {
  3. String message = directory +" does not exist";
  4. throw new IllegalArgumentException(message);
  5. }
  6. if (!directory.isDirectory()) {
  7. String message = directory +" is not a directory";
  8. throw new IllegalArgumentException(message);
  9. }
  10. ;
  11. File[] files =directory.listFiles();
  12. if (files == null) {  // null if security restricted
  13. return 0L;
  14. }
  15. for (File file : files) {
  16. size += sizeOf(file);
  17. }
  18. return size;
  19. }

测试指定文件的最后修改日期是否比reference的文件新isFileNewer(File file, Filereference)

  1. public static boolean isFileNewer(File file, File reference) {
  2. if (reference == null) {
  3. throw new IllegalArgumentException("No specified reference file");
  4. }
  5. if (!reference.exists()) {
  6. throw new IllegalArgumentException("The reference file '"
  7. + reference + "'doesn't exist");
  8. }
  9. return isFileNewer(file,reference.lastModified());
  10. }

检测指定文件的最后修改时间是否在指定日期之前isFileNewer(File file, Date date)

  1. public static boolean isFileNewer(File file, Date date) {
  2. if (date == null) {
  3. throw new llegalArgumentException("No specified date");
  4. }
  5. return isFileNewer(file,date.getTime());
  6. }

检测指定文件的最后修改时间(毫秒)是否在指定日期之前isFileNewer(File file, long timeMillis)

  1. public static boolean isFileNewer(File file, long timeMillis) {
  2. if (file == null) {
  3. throw new IllegalArgumentException("No specified file");
  4. }
  5. if (!file.exists()) {
  6. return false;
  7. }
  8. return file.lastModified() >timeMillis;
  9. }

检测指定文件的最后修改日期是否比reference文件的晚isFileOlder(File file, Filereference)

  1. public static boolean isFileOlder(File file, File reference) {
  2. if (reference == null) {
  3. throw new IllegalArgumentException("No specified reference file");
  4. }
  5. if (!reference.exists()) {
  6. throw new IllegalArgumentException("The reference file '"
  7. + reference + "'doesn't exist");
  8. }
  9. return isFileOlder(file,reference.lastModified());
  10. }

检测指定文件的最后修改时间是否在指定日期之后isFileOlder(File file, Date date)

  1. public static boolean isFileOlder(File file, Date date) {
  2. if (date == null) {
  3. throw new IllegalArgumentException("No specified date");
  4. }
  5. return isFileOlder(file,date.getTime());
  6. }

检测指定文件的最后修改时间(毫秒)是否在指定日期之后isFileOlder(File file, long timeMillis)

  1. public static boolean isFileOlder(Filefile, long timeMillis) {
  2. if (file == null) {
  3. throw new IllegalArgumentException("Nospecified file");
  4. }
  5. if (!file.exists()) {
  6. return false;
  7. }
  8. return file.lastModified() <timeMillis;
  9. }

计算使用CRC32校验程序文件的校验和checksumCRC32(File file)

  1. public static long checksumCRC32(File file) throws IOException {
  2. CRC32 crc = new CRC32();
  3. checksum(file, crc);
  4. return crc.getValue();
  5. }

计算一个文件使用指定的校验对象的校验checksum(Filefile, Checksum checksum)

  1. public static Checksum checksum(File file, Checksum checksum) throws IOException {
  2. if (file.isDirectory()) {
  3. throw new IllegalArgumentException("Checksums can't be computed ondirectories");
  4. }
  5. InputStream in = null;
  6. try {
  7. in = new CheckedInputStream(newFileInputStream(file), checksum);
  8. IOUtils.copy(in, newNullOutputStream());
  9. } finally {
  10. IOUtils.closeQuietly(in);
  11. }
  12. return checksum;
  13. }

移动目录到新的目录并且删除老的目录moveDirectory(File srcDir, File destDir)

  1. public static void moveDirectory(File srcDir, File destDir) throws IOException {
  2. if (srcDir == null) {
  3. throw new NullPointerException("Source must not be null");
  4. }
  5. if (destDir == null) {
  6. throw new NullPointerException("Destination must not be null");
  7. }
  8. if (!srcDir.exists()) {
  9. throw new FileNotFoundException("Source '" + srcDir + "' does notexist");
  10. }
  11. if (!srcDir.isDirectory()) {
  12. throw new IOException("Source '" + srcDir + "' is not a directory");
  13. }
  14. if (destDir.exists()) {
  15. throw new FileExistsException("Destination '" + destDir + "' alreadyexists");
  16. }
  17. boolean rename = srcDir.renameTo(destDir);
  18. if (!rename) {
  19. copyDirectory( srcDir, destDir);
  20. deleteDirectory( srcDir );
  21. if (srcDir.exists()) {
  22. throw new IOException("Failed to delete original directory '" + srcDir +
  23. "' after copyto '" + destDir + "'");
  24. }
  25. }
  26. }

把一个目录移动到另一个目录中去moveDirectoryToDirectory(File src, File destDir, booleancreateDestDir)

  1. public static void moveDirectoryToDirectory(File src, File destDir, booleancreateDestDir) throws IOException {
  2. if (src == null) {
  3. throw new NullPointerException("Source must not be null");
  4. }
  5. if (destDir == null) {
  6. throw new NullPointerException("Destination directory must not be null");
  7. }
  8. if (!destDir.exists() &&createDestDir) {
  9. destDir.mkdirs();
  10. }
  11. if (!destDir.exists()) {
  12. throw new FileNotFoundException("Destination directory '" + destDir +
  13. "' does not exist[createDestDir=" + createDestDir +"]");
  14. }
  15. if (!destDir.isDirectory()) {
  16. throw new IOException("Destination'" + destDir + "' is not a directory");
  17. }
  18. moveDirectory(src, newFile(destDir, src.getName()));
  19. }

复制文件到对应的文件中去moveFile(FilesrcFile, File destFile)

  1. public static void moveFile(File srcFile, File destFile) throws IOException {
  2. if (srcFile == null) {
  3. throw new NullPointerException("Source must not be null");
  4. }
  5. if (destFile == null) {
  6. throw new NullPointerException("Destination must not be null");
  7. }
  8. if (!srcFile.exists()) {
  9. throw new FileNotFoundException("Source '" + srcFile + "' does notexist");
  10. }
  11. if (srcFile.isDirectory()) {
  12. throw new IOException("Source '" + srcFile + "' is a directory");
  13. }
  14. if (destFile.exists()) {
  15. throw new FileExistsException("Destination '" + destFile + "' alreadyexists");
  16. }
  17. if (destFile.isDirectory()) {
  18. throw new IOException("Destination '" + destFile + "' is adirectory");
  19. }
  20. boolean rename =srcFile.renameTo(destFile);
  21. if (!rename) {
  22. copyFile( srcFile, destFile );
  23. if (!srcFile.delete()) {
  24. FileUtils.deleteQuietly(destFile);
  25. throw new IOException("Failed to delete original file '" + srcFile +
  26. "' after copyto '" + destFile + "'");
  27. }
  28. }
  29. }

复制文件到对应的文件中去,可设置当目标文件不存在时是否创建新的文件moveFile(File srcFile, File destFile)

  1. public static void moveFileToDirectory(File srcFile, File destDir, booleancreateDestDir) throws IOException {
  2. if (srcFile == null) {
  3. throw new NullPointerException("Source must not be null");
  4. }
  5. if (destDir == null) {
  6. throw new NullPointerException("Destinationdirectory must not be null");
  7. }
  8. if (!destDir.exists() &&createDestDir) {
  9. destDir.mkdirs();
  10. }
  11. if (!destDir.exists()) {
  12. throw new FileNotFoundException("Destination directory '" + destDir +
  13. "' does not exist[createDestDir=" + createDestDir +"]");
  14. }
  15. if (!destDir.isDirectory()) {
  16. throw new IOException("Destination'" + destDir + "' is not a directory");
  17. }
  18. moveFile(srcFile, new File(destDir,srcFile.getName()));
  19. }

移动文件或者目录到新的路径下,并且设置在目标路径不存在的情况下是否创建moveToDirectory(File src, File destDir, boolean createDestDir)

  1. public static void moveToDirectory(File src, File destDir, boolean createDestDir)throws IOException {
  2. if (src == null) {
  3. throw new NullPointerException("Source must not be null");
  4. }
  5. if (destDir == null) {
  6. throw new NullPointerException("Destination must not be null");
  7. }
  8. if (!src.exists()) {
  9. throw new FileNotFoundException("Source '" + src + "' does notexist");
  10. }
  11. if (src.isDirectory()) {
  12. moveDirectoryToDirectory(src,destDir, createDestDir);
  13. } else {
  14. moveFileToDirectory(src,destDir, createDestDir);
  15. }
  16. }

确定指定的文件是否是一个符号链接,而不是实际的文件。isSymlink(File file)

  1. public static boolean isSymlink(File file) throws IOException {
  2. if (file == null) {
  3. throw new NullPointerException("File must not be null");
  4. }
  5. if(FilenameUtils.isSystemWindows()) {
  6. return false;
  7. }
  8. File fileInCanonicalDir = null;
  9. if (file.getParent() == null) {
  10. fileInCanonicalDir = file;
  11. } else {
  12. File canonicalDir =file.getParentFile().getCanonicalFile();
  13. fileInCanonicalDir = newFile(canonicalDir, file.getName());
  14. }
  15. if(fileInCanonicalDir.getCanonicalFile().equals(fileInCanonicalDir.getAbsoluteFile())){
  16. return false;
  17. } else {
  18. return true;
  19. }
  20. }