本文章已收录于:
- package zs;
- 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;
- public class FileUtils {
- public byte[] getContent(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[] toByteArray(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();
- }
- }
- }
- }
package zs;
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;
public class FileUtils {
public byte[] getContent(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[] toByteArray(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();
}
}
}
}
-
顶
- 2
-
踩
- 0
我的同类文章
http://blog.csdn.net
- •String.getBytes()2016-05-21
- •JAVA中Long与Integer比较容易犯的错误2016-05-14
- •JAVA获取同一路径下所有子类或接口实现类2016-05-04
- •在spring的bean中注入内部类2016-02-01
- •JAVA字符串格式化-String.format()的使用2015-07-28
- •用java获取本机IP地址2015-02-02
- •Java double 相乘的小问题记录2016-05-19
- •深入理解Java:SimpleDateFormat安全的时间格式化2016-05-12
- •ServiceLoader的使用2016-05-04
- •Java 输出日历格式2015-08-06
- •JAVA中Collections.sort()实现List排序的公共方法和自定义方法2015-07-08