123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- package com.fdkankan.ucenter.common;
- import java.io.*;
- import java.nio.ByteBuffer;
- import java.nio.MappedByteBuffer;
- import java.nio.channels.FileChannel;
- import java.nio.channels.FileChannel.MapMode;
- /**
- * @author MeepoGuan
- *
- * <p>Description: file_util</p>
- *
- * 2017年4月30日
- *
- */
- public class FileUtil {
- /* public static void main(String[] args) {
- String dirName = "d:/FH/topic/";// 创建目录
- FileUtil.createDir(dirName);
- }*/
- /**
- * 创建目录
- *
- * @param destDirName
- * 目标目录名
- * @return 目录创建成功返回true,否则返回false
- */
- public static boolean createDir(String destDirName) {
- File dir = new File(destDirName);
- if (dir.exists()) {
- return false;
- }
- if (!destDirName.endsWith(File.separator)) {
- destDirName = destDirName + File.separator;
- }
- // 创建单个目录
- if (dir.mkdirs()) {
- return true;
- } else {
- return false;
- }
- }
- /**
- * 删除文件
- *
- * @param filePathAndName
- * String 文件路径及名称 如c:/fqf.txt
- * @return boolean
- */
- 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 //路径
- * @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("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;
- }
- /**
- * 读取到字节数组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 {
- try {
- in.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- bos.close();
- }
- }
- /**
- * 读取到字节数组2
- *
- * @param filePath
- * @return
- * @throws IOException
- */
- public static byte[] toByteArray2(String filePath) throws IOException {
- File f = new File(filePath);
- if (!f.exists()) {
- throw new FileNotFoundException(filePath);
- }
- 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 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(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 {
- rf.close();
- fc.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- public static File[] sort(File[] s) {
- //中间值
- File temp = null;
- //外循环:我认为最小的数,从0~长度-1
- for (int j = 0; j < s.length - 1; j++) {
- //最小值:假设第一个数就是最小的
- String min = s[j].getName();
- //记录最小数的下标的
- int minIndex = j;
- //内循环:拿我认为的最小的数和后面的数一个个进行比较
- for (int k = j + 1; k < s.length; k++) {
- //找到最小值
- if (Integer.parseInt(min.substring(0, min.indexOf("."))) > Integer.parseInt(s[k].getName().substring(0, s[k].getName().indexOf(".")))) {
- //修改最小
- min = s[k].getName();
- minIndex = k;
- }
- }
- //当退出内层循环就找到这次的最小值
- //交换位置
- temp = s[j];
- s[j] = s[minIndex];
- s[minIndex] = temp;
- }
- return s;
- }
- }
|