package com.github.coolcooldee.sloth.utils; import com.github.coolcooldee.sloth.Application; import com.google.common.io.CharStreams; import java.io.*; import java.net.URL; import java.security.CodeSource; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; /** * Created by sloth on 16/6/22. */ public abstract class DirectoryUtil { private static int fileLevel; private static String createPrintStr(String pathname, int level) { String printStr = ""; for (int i = 0; i < level; i++) { printStr = printStr + "│ "; } printStr = printStr + "├── " + pathname; return printStr; } private static void printDir(String dirPath) { String[] dirNameList = dirPath.split("\\\\"); fileLevel = dirNameList.length; for (int i = 0; i < dirNameList.length; i++) { System.out.println(createPrintStr(dirNameList[i], i)); } } public static void readFile(String dirPath) { Set<String> ignoreDirNamesSet = new HashSet<>(); ignoreDirNamesSet.add(".idea"); ignoreDirNamesSet.add("target"); File file = new File(dirPath); File[] list = file.listFiles(); for (int i = 0; i < list.length; i++) { if (list[i].isDirectory()) { if (ignoreDirNamesSet.contains(list[i].getName())) { continue; } System.out.println(createPrintStr(list[i].getName(), fileLevel)); fileLevel++; readFile(list[i].getPath()); fileLevel--; } else { if (list[i].getName().trim().startsWith(".")) { continue; } System.out.println(createPrintStr(list[i].getName(), fileLevel)); } } } public static String readFile2String(String dirPath) { StringBuffer sb = new StringBuffer(); Set<String> ignoreDirNamesSet = new HashSet<>(); ignoreDirNamesSet.add(".idea"); ignoreDirNamesSet.add("target"); File file = new File(dirPath); File[] list = file.listFiles(); for (int i = 0; i < list.length; i++) { if (list[i].isDirectory()) { if (ignoreDirNamesSet.contains(list[i].getName())) { continue; } sb.append(createPrintStr(list[i].getName(), fileLevel)+"\n"); fileLevel++; sb.append(readFile2String(list[i].getPath())); fileLevel--; } else { sb.append(createPrintStr(list[i].getName(), fileLevel)+"\n"); } } return sb.toString(); } public static void copyFolder(File src, File dest, final Set<String> ignoreFileSuffixs) { CodeSource codeSource = Application.class.getProtectionDomain().getCodeSource(); String location = codeSource.getLocation().getPath(); if(location.endsWith(".jar")){ String relativeSrcPath = "template/common/pagetemplate/static/"; if (src != null) { URL jar = codeSource.getLocation(); ZipInputStream zip = null; try { zip = new ZipInputStream(jar.openStream()); } catch (IOException e) { e.printStackTrace(); } while(true) { ZipEntry zipEntry = null; try { zipEntry = zip.getNextEntry(); } catch (IOException e1) { e1.printStackTrace(); } if (zipEntry == null) break; String name = zipEntry.getName(); if (name.startsWith(relativeSrcPath)&&(name.endsWith(".js")||name.endsWith(".css") || name.endsWith(".html"))) { try { InputStream inputStream=Application.class.getClass().getResourceAsStream(File.separator+name); String text = CharStreams.toString(new InputStreamReader(inputStream, "UTF-8")); //System.out.println(text); String filePath = dest.getPath() + name.replace(relativeSrcPath,File.separator); File newFile = new File(filePath); if(!newFile.exists()){ newFile.createNewFile(); } FileOutputStream fos = new FileOutputStream(newFile); fos.write(text.getBytes()); fos.flush(); inputStream.close(); fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } return; } if (src.isDirectory()) { if (!dest.exists()) { FileUtil.mkdir(dest.getPath()); } String files[] = src.list(); for (String file : files) { boolean flag = false; for (String ignoreFileSuffix : ignoreFileSuffixs) { if (file.endsWith(ignoreFileSuffix)) { flag = true; break; } } if (flag) continue; File srcFile = new File(src, file); File destFile = new File(dest, file); copyFolder(srcFile, destFile, ignoreFileSuffixs); } } else { InputStream in = null; try { in = new FileInputStream(src); OutputStream out = new FileOutputStream(dest); byte[] buffer = new byte[1024]; int length; while ((length = in.read(buffer)) > 0) { out.write(buffer, 0, length); } in.close(); out.close(); } catch (Exception e) { e.printStackTrace(); } } } public static ArrayList<File> getListFiles(Object obj) { File directory = null; if (obj instanceof File) { directory = (File) obj; } else { directory = new File(obj.toString()); } ArrayList<File> files = new ArrayList<File>(); if (directory.isFile()) { files.add(directory); return files; } else if (directory.isDirectory()) { File[] fileArr = directory.listFiles(); for (int i = 0; i < fileArr.length; i++) { File fileOne = fileArr[i]; files.addAll(getListFiles(fileOne)); } } return files; } }