package com.github.ltsopensource.core.commons.file; import com.github.ltsopensource.core.constant.Constants; import java.io.*; import java.nio.channels.FileChannel; import java.nio.charset.Charset; /** * @author Robert HG (254963746@qq.com) on 3/6/15. */ public class FileUtils { public static File createFileIfNotExist(File file) { if (!file.exists()) { // 创建父目录 file.getParentFile().mkdirs(); try { file.createNewFile(); } catch (IOException e) { throw new RuntimeException("create file[" + file.getAbsolutePath() + "] failed!", e); } } return file; } public static FileChannel newFileChannel(File file, String mode) throws FileNotFoundException { return new RandomAccessFile(file, mode).getChannel(); } public static File createFileIfNotExist(String path) { return createFileIfNotExist(new File(path)); } public static File createDirIfNotExist(File dir) throws IOException { if (!dir.exists()) { // 创建父目录 dir.getParentFile().mkdirs(); dir.mkdir(); } else if (!dir.isDirectory()) { throw new IOException("Not a directory [" + dir.getAbsolutePath() + "]"); } else if (!dir.canWrite()) { throw new IOException("Not writable [" + dir.getAbsolutePath() + "]"); } return dir.getAbsoluteFile(); } public static File createDirIfNotExist(String path) throws IOException { return createDirIfNotExist(new File(path)); } public static String read(InputStream is) throws IOException { return read(is, Charset.defaultCharset().name()); } public static String read(InputStream is, String encoding) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(is, encoding)); StringBuilder content = new StringBuilder(); String data = null; while ((data = br.readLine()) != null) { content.append(data); content.append(Constants.LINE_SEPARATOR); } return content.toString(); } public static void delete(File file) { if (!file.exists()) { return; } if (file.isDirectory()) { //若目录下没有文件则直接删除 File[] delFiles = file.listFiles(); if (delFiles == null || delFiles.length == 0) { file.delete(); } else { for (File delFile : delFiles) { if (delFile.isDirectory()) { delete(delFile); } delFile.delete(); } } } // 自己也删除 file.delete(); } public static void delete(String path) { delete(new File(path)); } public static void write(CharSequence charSequence, File file, Charset charset, boolean append) { Writer writer = null; try { createFileIfNotExist(file); writer = new OutputStreamWriter(new FileOutputStream(file, append), charset); writer.append(charSequence); writer.flush(); } catch (FileNotFoundException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } finally { if (writer != null) { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static boolean exist(String path){ return new File(path).exists(); } /** * 得到文件或者文件夹的大小(包含所有子文件) */ public static long getSize(File file) { if (file.exists()) { if (!file.isFile()) { long size = 0; File[] files = file.listFiles(); if (files != null && files.length > 0) { for (File f : files) { size += getSize(f); } } return size; } else { return file.length(); } } return 0; } }