package com.java110.code.util; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.util.Date; public class FileUtilBase { public static void save(byte[] body, File file) throws IOException { writeToFile(body, file); } public static void save(byte[] body, String fileName, String filePath) throws IOException{ writeToFile(body, fileName, filePath); } /*************************************************************************** * 删除指定目录结构 * * @param directoryName */ protected static void deleteFileDirectory(String filePath) { /** * 指定删除目录路径构造一个文件对象 * */ File file = new File(filePath); File[] fileList = file.listFiles(); /** * 初始化子目录路径 */ String dirPath = null; if (fileList != null) for (int i = 0; i < fileList.length; i++) { /** * 如果是文件就将其删除 */ if (fileList[i].isFile()) fileList[i].delete(); /** * 如果是目录,那么将些目录下所有文件删除后再将其目录删除, */ if (fileList[i].isDirectory()) { dirPath = fileList[i].getPath(); // 递归删除指定目录下所有文件 deleteFileDirectory(dirPath); } } /** * 删除给定根目录 */ file.delete(); } /** * 把文件读取到byte[]中 * * @param fileName * @return * @throws FileNotFoundException */ protected static byte[] getFileByte(String fileName, boolean isDelete) throws FileNotFoundException { FileInputStream fileInputStream = new FileInputStream(fileName); byte[] buffer = getFileByte(fileInputStream); if (isDelete) { new File(fileName).delete(); } return buffer; } /** * 将byte[]写入文件 * * @param buffer * @param file * @throws IOException */ protected static File writeToFile(byte[] buffer, String fileName, String filePath) throws IOException { File dir = new File(filePath); if (!dir.exists()) { dir.mkdirs(); } String abPath = filePath.concat(fileName); File file = new File(abPath); if (!file.exists()) { file.createNewFile(); } FileOutputStream out = new FileOutputStream(file); out.write(buffer); out.close(); return file; } /** * 将byte[]写入文件 * * @param buffer * @param file * @throws IOException */ protected static File writeToFile(byte[] buffer, File file) throws IOException { FileOutputStream out = new FileOutputStream(file); out.write(buffer); out.close(); return file; } /** * 把URL中的数据读取到byte[]中 * * @param url * @return * @throws IOException */ protected static byte[] getFileByte(URL url) throws IOException { if (url != null) { return getFileByte(url.openStream()); } else { return null; } } /** * 从IS中获取byte[] * * @param in * @return */ protected static byte[] getFileByte(InputStream in) { ByteArrayOutputStream out = new ByteArrayOutputStream(4096); try { copy(in, out); } catch (IOException e) { e.printStackTrace(); } return out.toByteArray(); } protected static void copy(InputStream in, OutputStream out) throws IOException { try { byte[] buffer = new byte[4096]; int nrOfBytes = -1; while ((nrOfBytes = in.read(buffer)) != -1) { out.write(buffer, 0, nrOfBytes); } out.flush(); } catch (IOException e) { } finally { try { if (in != null) { in.close(); } } catch (IOException ex) { } try { if (out != null) { out.close(); } } catch (IOException ex) { } } } /** * 截取路径文件名,包括扩展名 * @param fileName * @return */ public static String getFileNameSuff(String fileName) { return fileName.substring(fileName.lastIndexOf("/")+1); } /** * 以路径最后斜杠位置加1开始取,取到扩展名。不包括扩展名 * @param fileName * @return */ public static String getFileName(String fileName) { int pos = fileName.lastIndexOf("."); if(pos==-1){ return fileName; } return fileName.substring(fileName.lastIndexOf("/")+1,pos); } /** * 复制文件 * * @param f1 * 当前文件流 * @param f2 * 目标文件流 * @return * @throws Exception */ public static long copyfile(File f1, File f2) throws Exception { mkdirs(f2.getParent()); if (f2.exists() && f2.isFile()) { f2.delete(); } System.out.println("添加:"+f2.getAbsolutePath()); long time = new Date().getTime(); int length = 2097152; FileInputStream in = new FileInputStream(f1); FileOutputStream out = new FileOutputStream(f2); FileChannel inC = in.getChannel(); FileChannel outC = out.getChannel(); ByteBuffer b = null; while (true) { if (inC.position() == inC.size()) { inC.close(); outC.close(); return new Date().getTime() - time; } if ((inC.size() - inC.position()) < length) { length = (int) (inC.size() - inC.position()); } else length = 2097152; b = ByteBuffer.allocateDirect(length); inC.read(b); b.flip(); outC.write(b); outC.force(false); } } public static long copyfile(String filePath1, String filePath2) throws Exception { File f1=new File(filePath1); File f2=new File(filePath2); return copyfile(f1,f2); } /** * 创建文件夹及父节点 * @param file */ public static void mkdirs(File file){ if(file.isFile()){ file=new File(file.getParent()); } if(!file.exists()){ file.mkdirs(); } } /** * 创建文件夹及父节点 * @param file */ public static void mkdirs(String filePath){ File file = new File(filePath); mkdirs(file); } /** * 先创建父节点,再创建文件 * @param file * @throws IOException */ public static void createrFile(File file) throws IOException{ mkdirs(file.getParent()); // 判断父节点是否存在 if(!file.exists()){ file.createNewFile(); } } /** * 把字节写入文件中 * @param buffer * @param file * @return * @throws IOException */ public static File writeNewFile(byte[] buffer, File file) throws IOException{ return writeToFile(buffer, file); } /** * 删除文件 * @param file File 对象 */ public static void deleteFile(File file) { System.out.println("删除文件:"+file.getAbsolutePath()); file.delete(); } /** * 删除文件 * @param filePath */ public static void deleteFile(String filePath) { deleteFile(new File(filePath)); } /** * 创建父节点目录, * 判断删除文件2并复制文件1到文件2 * @param f1 当前文件流 * @param f2 目标文件流 * @return * @throws Exception */ public static void deleteAndCopyFile(File file1, File file2) throws Exception { mkdirs(file2.getParent()); if (file2.exists() && file2.isFile()) { file2.delete(); } if(file1.exists() && file1.isFile()){ copyfile(file1, file2); file1.delete(); } } /** * 创建父节点目录, * 判断删除文件2并复制文件1到文件2 * * @param f1 * 当前文件流 * @param f2 * 目标文件流 * @return * @throws Exception */ public static void deleteAndCopyFile(String file1Path, String file2Path) throws Exception { File file1 = new File(file1Path); File file2 = new File(file2Path); deleteAndCopyFile(file1, file2); } /** * 获得文件的扩展名 含 标点符号 * @param fileName * @return */ public static String getExtention(String fileName) { int pos = fileName.lastIndexOf("."); if(pos+1=1024*1024) { strunit = "mb"; intdivisor=1024*1024; } else if(filesize>=1024) { strunit = "kb"; intdivisor=1024; } if(intdivisor==1) return filesize + " " + strunit; straftercomma = "" + 100 * (filesize % intdivisor) / intdivisor ; if(straftercomma=="") straftercomma=".0"; return filesize / intdivisor + "." + straftercomma + " " + strunit; } }