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