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;
}
}