Files
3dplan/ndplan/src/main/java/com/system/util/FileUtil.java
2025-07-21 17:30:50 +08:00

541 lines
15 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.system.util;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
public class FileUtil {
/**
* 单个文件上传
* @param is
* @param fileName
* @param filePath
*/
public static boolean upFile(MultipartFile uploadFile,String fileName,String filePath){
FileOutputStream fos = null;
BufferedOutputStream bos = null;
FileInputStream is = null;
BufferedInputStream bis = null;
File file = new File(filePath);
if(!file.exists()){
file.mkdirs();
}
File f = new File(filePath+"/"+fileName);
try {
InputStream inputStream = uploadFile.getInputStream();
//is = new FileInputStream(uploadFile);
bis = new BufferedInputStream(inputStream);
fos = new FileOutputStream(f);
bos = new BufferedOutputStream(fos);
byte[] bt = new byte[4096];
int len = 0;
while((len = bis.read(bt))>0){
bos.write(bt, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
return false;
}finally {
try {
if(null != bos){
bos.close();
bos = null;
}
if(null != fos){
fos.close();
fos= null;
}
if(null != is){
is.close();
is=null;
}
if (null != bis) {
bis.close();
bis = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return true;
}
/**
* 文件下载
* @param response
* @param downloadFile
*/
public static void downloadFile(HttpServletRequest request, HttpServletResponse response, String downloadFile, String fileName) {
BufferedInputStream bis = null;
InputStream is = null;
OutputStream os = null;
BufferedOutputStream bos = null;
try {
File file=new File(downloadFile); //文件的声明
is = new FileInputStream(file); //文件流的声明
os = response.getOutputStream(); //重点突出(特别注意),通过response获取的输出流作为服务端往客户端浏览器输出内容的一个通道
// 为了提高效率使用缓冲区流
bis = new BufferedInputStream(is);
bos = new BufferedOutputStream(os);
// 处理下载文件名的乱码问题
if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
fileName = new String(fileName.getBytes("GB2312"),"ISO-8859-1");
} else {
// 对文件名进行编码处理中文问题
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");// 处理中文文件名的问题
fileName = new String(fileName.getBytes("UTF-8"), "GBK");// 处理中文文件名的问题
}
response.reset(); // 重点突出
response.setCharacterEncoding("UTF-8"); // 重点突出
response.setContentType("application/x-msdownload");// 不同类型的文件对应不同的MIME类型 // 重点突出
// inline在浏览器中直接显示不提示用户下载
// attachment弹出对话框提示用户进行下载保存本地
// 默认为inline方式
response.setHeader("Content-Disposition", "attachment;filename="+ fileName);
// response.setHeader("Content-Disposition", "attachment; filename="+fileName); // 重点突出
int bytesRead = 0;
byte[] buffer = new byte[1024];
while ((bytesRead = bis.read(buffer)) != -1){ //重点
bos.write(buffer, 0, bytesRead);// 将文件发送到客户端
}
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
} finally {
// 特别重要
// 1. 进行关闭是为了释放资源
// 2. 进行关闭会自动执行flush方法清空缓冲区内容
try {
if (null != bis) {
bis.close();
bis = null;
}
if (null != bos) {
bos.close();
bos = null;
}
if (null != is) {
is.close();
is = null;
}
if (null != os) {
os.close();
os = null;
}
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}
}
/**
* 文件下载
* @param response
* @param downloadFile
*/
public static void downloadFile(HttpServletResponse response, String downloadFile, String showFileName) {
BufferedInputStream bis = null;
InputStream is = null;
OutputStream os = null;
BufferedOutputStream bos = null;
try {
File file=new File(downloadFile); //:文件的声明
String fileName=file.getName();
is = new FileInputStream(file); //:文件流的声明
os = response.getOutputStream(); // 重点突出
bis = new BufferedInputStream(is);
bos = new BufferedOutputStream(os);
// 对文件名进行编码处理中文问题
fileName = java.net.URLEncoder.encode(showFileName, "UTF-8");// 处理中文文件名的问题
fileName = new String(fileName.getBytes("UTF-8"), "GBK");// 处理中文文件名的问题
response.reset(); // 重点突出
response.setCharacterEncoding("UTF-8"); // 重点突出
response.setContentType("application/x-msdownload");// 不同类型的文件对应不同的MIME类型 // 重点突出
// inline在浏览器中直接显示不提示用户下载
// attachment弹出对话框提示用户进行下载保存本地
// 默认为inline方式
response.setHeader("Content-Disposition", "attachment; filename="+fileName); // 重点突出
int bytesRead = 0;
byte[] buffer = new byte[1024];
while ((bytesRead = bis.read(buffer)) != -1){ //重点
bos.write(buffer, 0, bytesRead);// 将文件发送到客户端
}
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
} finally {
// 特别重要
// 1. 进行关闭是为了释放资源
// 2. 进行关闭会自动执行flush方法清空缓冲区内容
try {
if (null != bis) {
bis.close();
bis = null;
}
if (null != bos) {
bos.close();
bos = null;
}
if (null != is) {
is.close();
is = null;
}
if (null != os) {
os.close();
os = null;
}
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}
}
/**
* 文件下载
* @param response
* @param downloadFile
*/
public static void downloadPDFFile(HttpServletResponse response, String showFileName, byte[] data) {
OutputStream os = null;
BufferedOutputStream bos = null;
try {
// 对文件名进行编码处理中文问题
/*showFileName = URLEncoder.encode(showFileName, "UTF-8");
if (showFileName.length() > 150) {
String guessCharset = "gb2312"; 根据request的locale 得出可能的编码中文操作系统通常是gb2312
showFileName = new String(showFileName.getBytes("gb2312"), "ISO8859-1");
} */
showFileName = new String(showFileName.getBytes("utf-8"),"iso8859-1");
os = response.getOutputStream(); // 重点突出
bos = new BufferedOutputStream(os);
// 对文件名进行编码处理中文问题
response.reset(); // 重点突出
response.setHeader("Accept-Ranges", "bytes");
response.setHeader("Cache-Control", "no-store");
response.setHeader("Content-Length", data.length + "");
response.setHeader("Content-Type", "application/pdf");
//response.setHeader("X-Application-Context","application:8080");
response.setCharacterEncoding("UTF-8"); // 重点突出
//response.setContentType("application/pdf");// 不同类型的文件对应不同的MIME类型 // 重点突出
// inline在浏览器中直接显示不提示用户下载
// attachment弹出对话框提示用户进行下载保存本地
// 默认为inline方式
//attachment;filename= attachment;浏览器会自动下载
//response.setHeader("Content-Disposition", "filename=9999"); // 重点突出
bos.write(data);
bos.flush();
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
} finally {
try {
if (null != bos) {
bos.close();
bos = null;
}
if (null != os) {
os.close();
os = null;
}
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}
}
/**
* 将文本文件转换成2进制
* @param is
* @param fileName
* @param filePath
*/
public static byte[] convertFile2Byte(MultipartFile uploadFile){
try {
if(uploadFile == null){
return null;
}
return uploadFile.getBytes();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
*
* @Title: convertFile2Base64Str
* @Description: 将上传文件解析成base64字符串
* @param uploadFile
* @return
* @return String 返回类型
* @throws
*/
public static String convertFile2Base64Str(MultipartFile uploadFile){
try {
return Base64Util.encode(convertFile2Byte(uploadFile));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String txt2String(File file){
StringBuilder result = new StringBuilder();
try{
InputStreamReader ir =new InputStreamReader(new FileInputStream(file), "utf-8");
BufferedReader br = new BufferedReader(ir);//构造一个BufferedReader类来读取文件
String s = null;
while((s = br.readLine())!=null){//使用readLine方法一次读一行
result.append(new String(s.getBytes()));
}
br.close();
}catch(Exception e){
e.printStackTrace();
}
return result.toString();
}
public static String ReadFile(String Path){
BufferedReader reader = null;
String laststr = "";
try{
FileInputStream fileInputStream = new FileInputStream(Path);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
reader = new BufferedReader(inputStreamReader);
String tempString = null;
while((tempString = reader.readLine()) != null){
laststr += tempString;
}
reader.close();
}catch(IOException e){
e.printStackTrace();
}finally{
if(reader != null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return laststr;
}
public static List<String> ReadLine(String Path){
BufferedReader reader = null;
List<String> lines = new ArrayList<String>();
try{
FileInputStream fileInputStream = new FileInputStream(Path);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
reader = new BufferedReader(inputStreamReader);
String line = null;
while((line = reader.readLine()) != null){
lines.add(line);
}
reader.close();
}catch(IOException e){
e.printStackTrace();
}finally{
if(reader != null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return lines;
}
/**
*
* @Title: toByteArray3
* @Description: TODO
* @param filename
* @return
* @throws IOException
* @return byte[] 返回类型
* @throws
*/
@SuppressWarnings("resource")
public static byte[] file2ByteArray(String filename) throws IOException {
FileChannel fc = null;
try {
fc = new RandomAccessFile(filename, "r").getChannel();
MappedByteBuffer byteBuffer = fc.map(MapMode.READ_ONLY, 0, fc.size()).load();
byte[] result = new byte[(int) fc.size()];
if (byteBuffer.remaining() > 0) {
byteBuffer.get(result, 0, byteBuffer.remaining());
}
return result;
} catch (IOException e) {
e.printStackTrace();
throw e;
} finally {
try {
fc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static byte[] getFileToByte(File file) {
InputStream is = null;
ByteArrayOutputStream bytestream = null;
byte[] by = new byte[(int) file.length()];
try {
is = new FileInputStream(file);
bytestream = new ByteArrayOutputStream();
byte[] bb = new byte[2048];
int ch;
ch = is.read(bb);
while (ch != -1) {
bytestream.write(bb, 0, ch);
ch = is.read(bb);
}
by = bytestream.toByteArray();
} catch (Exception ex) {
ex.printStackTrace();
}finally {
try {
if(is != null) is.close();
if(bytestream != null) bytestream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return by;
}
public static byte[] getFileToByte(String filename) {
File file = new File(filename);
if(!file.exists()) throw new RuntimeException("文件不存在");
return getFileToByte( file);
}
/**
*
* writeData: 将数据写入指定的文件中
*
* @param filePath
* @param data
* @return boolean 是否写入成功
*/
public static boolean writeData(String filePath, byte[] data){
FileOutputStream fos = null;
try {
File file = new File(filePath);
if(file.exists()){
file.delete();
}
file.createNewFile();
fos =new FileOutputStream(file);
fos.write(data);
fos.close();
return true;
} catch (Exception e) {
return false;
}finally{
if(fos != null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* @param filePath
* @param data
* @param nextLine
* @return boolean 是否写入成功
*/
public static boolean append(String filePath, String data, boolean nextLine ){
try {
try {
File file = new File(filePath);
if(!file.exists()){
file.createNewFile();
}
FileOutputStream fos = new FileOutputStream(file, true);
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
if(nextLine) {
data = data + System.lineSeparator();
}
osw.write(data);
osw.flush();
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
return true;
} catch (Exception e) {
return false;
}finally{
}
}
public static void main(String[] args) throws IOException {
FileUtil.append("D:\\aa.txt", "12323",true);
}
}