|
@@ -0,0 +1,240 @@
|
|
|
+package com.fdkankan.common.util;
|
|
|
+
|
|
|
+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;
|
|
|
+ }
|
|
|
+}
|