文件操作工具

import java.io.*;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

/**
 * DateTime: 2016/9/18 21:04
 * 功能:文件操作工具
 * 思路:
 */
public class FileUtil {
    public static void main(String[] args) {

    }

    /**
     *创建目录
     * @param destDirName 目标目录名
     * @return
     */
    public static boolean createDir(String destDirName){
        File dir=new File(destDirName);
        if(dir.exists()){
            return  false;
        }
        if(!destDirName.endsWith(File.separator)){  //如果结尾没有文件分隔符
            destDirName+=File.separator;
        }
        //创建单个目录
        if(dir.mkdir()){
            return true;
        }else return false;

    }

    /**
     * 删除文件
     * @param filePathAndName   文件路径及名称 如c:/fqf.txt
     */
    public static void delFile(String filePathAndName){
        try {
            String filePath=filePathAndName;
            filePath=filePath.toString();
            File myDelFile=new File(filePath);
            myDelFile.delete();

        }catch ( Exception e ){
            System.out.println("删除文件出错");
            e.printStackTrace();
        }
    }

    /**
     * 读取到字节数组0
     * @param filePath  路径
     * @return
     * @throws IOException
     */
    public static byte[] getContent(String filePath) throws IOException{
        File file=new File(filePath);
        long fileSize=file.length();
        if(fileSize>Integer.MAX_VALUE){
            System.out.println("文件太大....");
            return null;
        }

        FileInputStream fi=new FileInputStream(file);
        byte[] buffer=new byte[(int)fileSize];
        int offset=0;
        int numRead=0;
        while ( offset<buffer.length &&(numRead=fi.read(buffer,offset,buffer.length-offset))>=0 ){
            offset+=numRead;
        }
        //确保所有数据均被读完
        if(offset!=buffer.length){
            throw new IOException("不能全部读取文件:"+file.getName());
        }
        fi.close();
        return  buffer;
    }

    /**
     * 读取到字节数组1
     * @param filePath
     * @return
     * @throws IOException
     */
    public static byte[] toByteArray(String filePath) throws IOException{
        File f=new File(filePath);
        if(!f.exists()){
            throw new FileNotFoundException("文件不能找到:"+filePath);
        }
        ByteArrayOutputStream bos=new ByteArrayOutputStream((int)f.length());
        BufferedInputStream in=null;

        try {
            in=new BufferedInputStream(new FileInputStream(f));
            int buf_size=1024;
            byte[] buffer=new byte[buf_size];
            int len=0;
            while ( -1!=(len=in.read(buffer,0,buf_size)) ){
                bos.write(buffer,0,len);
            }
            return bos.toByteArray();
        }catch ( IOException e ){
            e.printStackTrace();
            throw e;
        }finally {
            in.close();
            bos.close();
        }

    }


    public static byte[] toByteArray2(String filePath) throws IOException{
        File f=new File(filePath);
        if(!f.exists()){
            throw new FileNotFoundException("文件不能找到:"+filePath);
        }
        FileChannel channel=null;   //Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。
        FileInputStream fs=null;
        try {
            fs=new FileInputStream(f);
            channel=fs.getChannel();
            ByteBuffer byteBuffer=ByteBuffer.allocate((int)channel.size());
            while ( (channel.read(byteBuffer)) >0 ){

            }
            return byteBuffer.array();
        }catch ( IOException e ){
            e.printStackTrace();
            throw e;
        }finally {
            channel.close();
            fs.close();
        }

    }

    /**
     * Mapped File way MappedByteBuffer 可以在处理大文件时,提升性能
     * @param filePath
     * @return
     * @throws IOException
     */
    public static byte[] toByteArray3(String filePath) throws IOException{
        FileChannel fc=null;
        RandomAccessFile rf=null;

        try {
            rf=new RandomAccessFile(filePath,"r");
            fc=rf.getChannel();
            MappedByteBuffer byteBuffer=fc.map(FileChannel.MapMode.READ_ONLY,0,fc.size()).load();
            byte[] result=new byte[(int)fc.size()];
            if(byteBuffer.remaining()>0){
                byteBuffer.get(result,0,byteBuffer.remaining());
            }
            return result;
        }catch ( IOException e ){
            e.printStackTrace();
            throw e;
        }finally {
            rf.close();
            fc.close();
        }

    }


}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值