java读取文件读取工具类-将文件到byte数组的几种方式
2016-04-14 15:38
603 查看
package zmx.util; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.nio.channels.FileChannel.MapMode; import java.util.Arrays; import java.util.List; /** * java实现读取文件到Byte数组 * @author zhangwenchao * */ public class FileToByteArrayUtils { public static byte[] toByteArray0(String filePath) throws IOException { File file = new File(filePath); long fileSize = file.length(); if (fileSize > Integer.MAX_VALUE) { System.out.println("file too big..."); 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("Could not completely read file " + file.getName()); } fi.close(); return buffer; } /** * the traditional io way * @param filename * @return * @throws IOException */ public static byte[] toByteArray1(String filename) throws IOException { File f = new File(filename); if (!f.exists()) { throw new FileNotFoundException(filename); } 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 { try { in.close(); } catch (IOException e) { e.printStackTrace(); } bos.close(); } } /** * NIO way * @param filename * @return * @throws IOException */ public static byte[] toByteArray2(String filename) throws IOException { File f = new File(filename); if (!f.exists()) { throw new FileNotFoundException(filename); } FileChannel channel = null; FileInputStream fs = null; try { fs = new FileInputStream(f); channel = fs.getChannel(); ByteBuffer byteBuffer = ByteBuffer.allocate((int) channel.size()); while ((channel.read(byteBuffer)) > 0) { // do nothing // System.out.println("reading"); } return byteBuffer.array(); } catch (IOException e) { e.printStackTrace(); throw e; } finally { try { channel.close(); } catch (IOException e) { e.printStackTrace(); } try { fs.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * Mapped File way MappedByteBuffer 可以在处理大文件时,提升性能 * @param filename * @return * @throws IOException */ public static byte[] toByteArray3(String filename) throws IOException { FileChannel fc = null; try { fc = new RandomAccessFile(filename, "r").getChannel(); MappedByteBuffer byteBuffer = fc.map(MapMode.READ_ONLY, 0,fc.size()).load(); //System.out.println(byteBuffer.isLoaded()); byte[] result = new byte[(int) fc.size()]; if (byteBuffer.remaining() > 0) { // System.out.println("remain"); byteBuffer.get(result, 0, byteBuffer.remaining()); } return result; } catch (IOException e) { e.printStackTrace(); throw e; } finally { try { fc.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { try { byte[] dataArray0 = FileToByteArrayUtils.toByteArray0("D:\\projects\\testWeb\\src\\zmx\\util\\test.txt"); for(int i=0;i<dataArray0.length;i++){ System.out.print(dataArray0[i]); } System.out.println(); byte[] dataArray1 = FileToByteArrayUtils.toByteArray1("D:\\projects\\testWeb\\src\\zmx\\util\\test.txt"); for(int i=0;i<dataArray1.length;i++){ System.out.print(dataArray1[i]); } System.out.println(); byte[] dataArray2 = FileToByteArrayUtils.toByteArray2("D:\\projects\\testWeb\\src\\zmx\\util\\test.txt"); for(int i=0;i<dataArray2.length;i++){ System.out.print(dataArray2[i]); } System.out.println(); byte[] dataArray3 = FileToByteArrayUtils.toByteArray3("D:\\projects\\testWeb\\src\\zmx\\util\\test.txt"); for(int i=0;i<dataArray3.length;i++){ System.out.print(dataArray3[i]); } System.out.println(); } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- Java之获取表字段名
- Java设计模式(三) Visitor(访问者)模式及多分派场景应用
- Java下利用Jackson进行JSON解析和序列化
- Java多线程——java.util.concurrent库中的CyclicBarrier和CountDownLatch工具
- spring+ibatis+多数据源
- Java中的弱引用
- World Wind Java开发 加载三维模型
- Java SPI机制
- 页面生成带有合计的表格
- Struts2---标签
- Maven---入门
- 线程-001-线程简介
- 深度理解spring的IOC
- SpringMVC中拦截器的使用
- java要整理的一些知识
- JAVA基础(24) web.xml配置详解二
- java毕向东听课笔记13(线程2)
- Maven项目中,编译proto文件成Java类
- Java中的BoneCP数据库连接池用法
- 项目开发环境搭建手记(2.Jdk安装——替代原有的OpenJDK)