用apache的工具类FileUtils将文件转换成字节流

         昨天在做一个将获取到的文件转换成字节流的工作,查了一下都是自己用流写的代码,然而同事告诉我说有一个专门的工具类 ---- apache的commons包下的FileUtils类,里面有跟多跟流有关的代码。所以还是要多看多记一些专门的工具类。

org.apache.commons.io.FileUtils源码:


package org.apache.commons.io;
 
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.math.BigInteger;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.zip.CRC32;
import java.util.zip.CheckedInputStream;
import java.util.zip.Checksum;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.apache.commons.io.filefilter.FalseFileFilter;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.SuffixFileFilter;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.apache.commons.io.output.NullOutputStream;
 
public class FileUtils
{
  public static final long ONE_KB = 1024L;
  public static final BigInteger ONE_KB_BI = BigInteger.valueOf(1024L);
  public static final long ONE_MB = 1048576L;
  public static final BigInteger ONE_MB_BI = ONE_KB_BI.multiply(ONE_KB_BI);
  private static final long FILE_COPY_BUFFER_SIZE = 31457280L;
  public static final long ONE_GB = 1073741824L;
  public static final BigInteger ONE_GB_BI = ONE_KB_BI.multiply(ONE_MB_BI);
  public static final long ONE_TB = 1099511627776L;
  public static final BigInteger ONE_TB_BI = ONE_KB_BI.multiply(ONE_GB_BI);
  public static final long ONE_PB = 1125899906842624L;
  public static final BigInteger ONE_PB_BI = ONE_KB_BI.multiply(ONE_TB_BI);
  public static final long ONE_EB = 1152921504606846976L;
  public static final BigInteger ONE_EB_BI = ONE_KB_BI.multiply(ONE_PB_BI);
  public static final BigInteger ONE_ZB = BigInteger.valueOf(1024L).multiply(BigInteger.valueOf(1152921504606846976L));
  public static final BigInteger ONE_YB = ONE_KB_BI.multiply(ONE_ZB);
  public static final File[] EMPTY_FILE_ARRAY = new File[0];
  private static final Charset UTF8 = Charset.forName("UTF-8");
 
  public static File getFile(File directory, String[] names)
  {
    if (directory == null)
      throw new NullPointerException("directorydirectory must not be null");
 
    if (names == null)
      throw new NullPointerException("names must not be null");
 
    File file = directory;
    String[] arr$ = names; int len$ = arr$.length; for (int i$ = 0; i$ < len$; ++i$) { String name = arr$[i$];
      file = new File(file, name);
    }
    return file;
  }
 
  public static File getFile(String[] names)
  {
    if (names == null)
      throw new NullPointerException("names must not be null");
 
    File file = null;
    String[] arr$ = names; int len$ = arr$.length; for (int i$ = 0; i$ < len$; ++i$) { String name = arr$[i$];
      if (file == null)
        file = new File(name);
      else
        file = new File(file, name);
    }
 
    return file;
  }
 
  public static String getTempDirectoryPath()
  {
    return System.getProperty("java.io.tmpdir");
  }
 
  public static File getTempDirectory()
  {
    return new File(getTempDirectoryPath());
  }
 
  public static String getUserDirectoryPath()
  {
    return System.getProperty("user.home");
  }
 
  public static File getUserDirectory()
  {
    return new File(getUserDirectoryPath());
  }
 
  public static FileInputStream openInputStream(File file)
    throws IOException
  {
    if (file.exists()) {
      if (file.isDirectory())
        throw new IOException("File '" + file + "' exists but is a directory");
 
      if (file.canRead()) break label117;
      throw new IOException("File '" + file + "' cannot be read");
    }
 
    throw new FileNotFoundException("File '" + file + "' does not exist");
 
    label117: return new FileInputStream(file);
  }
 
  public static FileOutputStream openOutputStream(File file)
    throws IOException
  {
    return openOutputStream(file, false);
  }
 
  public static FileOutputStream openOutputStream(File file, boolean append)
    throws IOException
  {
    if (file.exists()) {
      if (file.isDirectory())
        throw new IOException("File '" + file + "' exists but is a directory");
 
      if (file.canWrite()) break label140;
      throw new IOException("File '" + file + "' cannot be written to");
    }
 
    File parent = file.getParentFile();
    if ((parent != null) && 
      (!(parent.mkdirs())) && (!(parent.isDirectory()))) {
      throw new IOException("Directory '" + parent + "' could not be created");
    }
 
    label140: return new FileOutputStream(file, append);
  }
 
  public static String byteCountToDisplaySize(BigInteger size)
  {
    String displaySize;
    if (size.divide(ONE_EB_BI).compareTo(BigInteger.ZERO) > 0)
      displaySize = String.valueOf(size.divide(ONE_EB_BI)) + " EB";
    else if (size.divide(ONE_PB_BI).compareTo(BigInteger.ZERO) > 0)
      displaySize = String.valueOf(size.divide(ONE_PB_BI)) + " PB";
    else if (size.divide(ONE_TB_BI).compareTo(BigInteger.ZERO) > 0)
      displaySize = String.valueOf(size.divide(ONE_TB_BI)) + " TB";
    else if (size.divide(ONE_GB_BI).compareTo(BigInteger.ZERO) > 0)
      displaySize = String.valueOf(size.divide(ONE_GB_BI)) + " GB";
    else if (size.divide(ONE_MB_BI).compareTo(BigInteger.ZERO) > 0)
      displaySize = String.valueOf(size.divide(ONE_MB_BI)) + " MB";
    else if (size.divide(ONE_KB_BI).compareTo(BigInteger.ZERO) > 0)
      displaySize = String.valueOf(size.divide(ONE_KB_BI)) + " KB";
    else
      displaySize = String.valueOf(size) + " bytes";
 
    return displaySize;
  }
 
  public static String byteCountToDisplaySize(long size)
  {
    return byteCountToDisplaySize(BigInteger.valueOf(size));
  }
 
  public static void touch(File file)
    throws IOException
  {
    if (!(file.exists())) {
      OutputStream out = openOutputStream(file);
      IOUtils.closeQuietly(out);
    }
    boolean success = file.setLastModified(System.currentTimeMillis());
    if (!(success))
      throw new IOException("Unable to set the last modification time for " + file);
  }
 
  public static File[] convertFileCollectionToFileArray(Collection<File> files)
  {
    return ((File[])files.toArray(new File[files.size()]));
  }
 
  private static void innerListFiles(Collection<File> files, File directory, IOFileFilter filter, boolean includeSubDirectories)
  {
    File[] arr$;
    int i$;
    File[] found = directory.listFiles(filter);
 
    if (found != null) {
      arr$ = found; int len$ = arr$.length; for (i$ = 0; i$ < len$; ++i$) { File file = arr$[i$];
        if (file.isDirectory()) {
          if (includeSubDirectories)
            files.add(file);
 
          innerListFiles(files, file, filter, includeSubDirectories);
        } else {
          files.add(file);
        }
      }
    }
  }
 
  public static Collection<File> listFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)
  {
    validateListFilesParameters(directory, fileFilter);
 
    IOFileFilter effFileFilter = setUpEffectiveFileFilter(fileFilter);
    IOFileFilter effDirFilter = setUpEffectiveDirFilter(dirFilter);
 
    Collection files = new LinkedList();
    innerListFiles(files, directory, FileFilterUtils.or(new IOFileFilter[] { effFileFilter, effDirFilter }), false);
 
    return files;
  }
 
  private static void validateListFilesParameters(File directory, IOFileFilter fileFilter)
  {
    if (!(directory.isDirectory()))
      throw new IllegalArgumentException("Parameter 'directory' is not a directory");
 
    if (fileFilter == null)
      throw new NullPointerException("Parameter 'fileFilter' is null");
  }
 
  private static IOFileFilter setUpEffectiveFileFilter(IOFileFilter fileFilter)
  {
    return FileFilterUtils.and(new IOFileFilter[] { fileFilter, FileFilterUtils.notFileFilter(DirectoryFileFilter.INSTANCE) });
  }
 
  private static IOFileFilter setUpEffectiveDirFilter(IOFileFilter dirFilter)
  {
    return (
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值