| New file |
| | |
| | | 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<fileName.length()){ |
| | | return fileName.substring(pos); |
| | | } |
| | | return ""; |
| | | } |
| | | /** |
| | | * 获得文件的扩展名 不含标点符号 |
| | | * @param fileName |
| | | * @return |
| | | */ |
| | | public static String getFileType(String fileName) { |
| | | int pos = fileName.lastIndexOf("."); |
| | | if(pos+1<fileName.length()){ |
| | | return fileName.substring(pos+1); |
| | | } |
| | | return ""; |
| | | } |
| | | /** |
| | | * 根据路径获得文件内容 |
| | | * @param fileName |
| | | * @return |
| | | */ |
| | | public static String getFileContent(String filePath) { |
| | | File file = new File(filePath); |
| | | return getFileContent(file); |
| | | } |
| | | /** |
| | | * 根据File对象获得文件内容 |
| | | * @param fileName |
| | | * @return |
| | | */ |
| | | public static String getFileContent(File file) { |
| | | String htmlCode = ""; |
| | | try { |
| | | String encoding = "UTF-8"; |
| | | if (file.isFile() && file.exists()) { // 判断文件是否存在 |
| | | |
| | | BufferedReader bufferedReader = new BufferedReader(new UnicodeReader(new FileInputStream(file), encoding)); |
| | | String lineTxt = null; |
| | | while ((lineTxt = bufferedReader.readLine()) != null) { |
| | | htmlCode += lineTxt; |
| | | } |
| | | bufferedReader.close(); |
| | | } else { |
| | | System.out.println("找不到指定的文件"); |
| | | } |
| | | } catch (Exception e) { |
| | | System.out.println("读取文件内容出错"); |
| | | e.printStackTrace(); |
| | | } |
| | | return htmlCode; |
| | | } |
| | | public static void upload(String filePath, String saveAsFileName,File upload) throws Exception { |
| | | if (upload != null) { |
| | | |
| | | if (!filePath.equals("")) { |
| | | File file = new File(filePath); |
| | | if (!file.exists()) { |
| | | file.mkdirs(); |
| | | } |
| | | } |
| | | filePath =filePath.concat(saveAsFileName); |
| | | File imageFile = new File(filePath); |
| | | deleteAndCopyFile(upload, imageFile); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 文件字节大小转换文字描述 |
| | | * @param fileName |
| | | * @return |
| | | */ |
| | | public static String convertfilesize(long filesize) |
| | | { |
| | | String strunit="bytes"; |
| | | String straftercomma=""; |
| | | int intdivisor=1; |
| | | if(filesize>=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; |
| | | } |
| | | |
| | | } |