package com.izouma.awesomeAdmin.utils; import org.apache.commons.lang3.StringUtils; import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.attribute.PosixFileAttributeView; import java.nio.file.attribute.PosixFileAttributes; import java.nio.file.attribute.PosixFilePermission; import java.nio.file.attribute.PosixFilePermissions; import java.util.Set; public class FileUtils { public static String getExtension(String fileName) { if (StringUtils.INDEX_NOT_FOUND == StringUtils.indexOf(fileName, ".")) return StringUtils.EMPTY; String ext = StringUtils.substring(fileName, StringUtils.lastIndexOf(fileName, ".")); return StringUtils.trimToEmpty(ext); } public static String getFileName(String header) { String[] tempArr1 = header.split(";"); String[] tempArr2 = tempArr1[2].split("="); // 获取文件名,兼容各种浏览器的写法 return tempArr2[1].substring(tempArr2[1].lastIndexOf("\\") + 1).replaceAll("\"", ""); } /** * 获取文件权限 * *
     * 当前仅支持posix系统,需要修改为windows格式
     * 
* * @param path * @return * @throws IOException */ public static String getPermissions(Path path) throws IOException { PosixFileAttributeView fileAttributeView = Files.getFileAttributeView(path, PosixFileAttributeView.class); PosixFileAttributes readAttributes = fileAttributeView.readAttributes(); Set permissions = readAttributes.permissions(); return PosixFilePermissions.toString(permissions); } /** * 修改文件权限 * * @param file * @param permsCode * @param recursive * @return * @throws IOException */ public static String setPermissions(File file, String permsCode, boolean recursive) throws IOException { PosixFileAttributeView fileAttributeView = Files.getFileAttributeView(file.toPath(), PosixFileAttributeView.class); fileAttributeView.setPermissions(PosixFilePermissions.fromString(permsCode)); if (file.isDirectory() && recursive && file.listFiles() != null) { for (File f : file.listFiles()) { setPermissions(f, permsCode, true); } } return permsCode; } public static boolean write(InputStream inputStream, File f) { boolean ret = false; try (OutputStream outputStream = new FileOutputStream(f)) { int read; byte[] bytes = new byte[1024]; while ((read = inputStream.read(bytes)) != -1) { outputStream.write(bytes, 0, read); } ret = true; } catch (IOException e) { e.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return ret; } public static void mkFolder(String fileName) { File f = new File(fileName); if (!f.exists()) { f.mkdir(); } } public static File mkFile(String fileName) { File f = new File(fileName); try { f.createNewFile(); } catch (IOException e) { e.printStackTrace(); } return f; } public static void fileProber(File dirFile) { File parentFile = dirFile.getParentFile(); if (!parentFile.exists()) { // 递归寻找上级目录 fileProber(parentFile); parentFile.mkdir(); } } /** * 将文本文件中的内容读入到buffer中 * * @param buffer buffer * @param filePath 文件路径 * @throws IOException 异常 * @date 2013-1-7 */ public static void readToBuffer(StringBuffer buffer, String filePath) throws IOException { InputStream is = new FileInputStream(filePath); String line; // 用来保存每行读取的内容 BufferedReader reader = new BufferedReader(new InputStreamReader(is)); line = reader.readLine(); // 读取第一行 while (line != null) { // 如果 line 为空说明读完了 buffer.append(line); // 将读到的内容添加到 buffer 中 buffer.append("\n"); // 添加换行符 line = reader.readLine(); // 读取下一行 } reader.close(); is.close(); } /** * 读取文本文件内容 * * @param filePath 文件所在路径 * @return 文本内容 * @throws IOException 异常 * @date 2013-1-7 */ public static String readFile(String filePath) throws IOException { StringBuffer sb = new StringBuffer(); FileUtils.readToBuffer(sb, filePath); return sb.toString(); } /** * 功能:Java读取txt文件的内容 * 步骤:1:先获得文件句柄 * 2:获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取 * 3:读取到输入流后,需要读取生成字节流 * 4:一行一行的输出。readline()。 * 备注:需要考虑的是异常情况 */ public static String readFileToString(File file) { try { if (file.isFile() && file.exists()) { //判断文件是否存在 Long filelength = file.length(); // 获取文件长度 byte[] filecontent = new byte[filelength.intValue()]; try { FileInputStream in = new FileInputStream(file); in.read(filecontent); in.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } String fileContentArr = new String(filecontent); return fileContentArr;// 返回文件内容,默认编码 } else { System.out.println("找不到指定的文件"); } } catch (Exception e) { System.out.println("读取文件内容出错"); e.printStackTrace(); } return null; } }