123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- package com.jsh.erp.utils;
- import javax.servlet.http.HttpServletRequest;
- import java.io.*;
- import java.net.URLEncoder;
- import java.util.*;
- /**
- *
- * 文件处理工具类
- *
- */
- public class FileUtils {
- /**
- * 功 能: 创建文件夹
- *
- * @param path
- * 参 数:要创建的文件夹名称
- * @return 返回值: 如果成功true;否则false 如:FileUtils.mkdir("/usr/apps/upload/");
- */
- public static boolean makedir(String path) {
- File file = new File(path);
- if (!file.exists())
- return file.mkdirs();
- else
- return true;
- }
- /**
- * 保存文件
- *
- * @param stream
- * @param path
- * 存放路径
- * @param filename
- * 文件名
- * @throws IOException
- */
- public static void SaveFileFromInputStream(InputStream stream, String path, String filename)
- throws IOException {
- File file = new File(path);
- boolean flag=true;
- if(!file.exists()){
- flag=file.mkdirs();
- }
- if(flag){
- FileOutputStream fs = new FileOutputStream(new File(path+filename));
- byte[] buffer = new byte[1024 * 1024];
- int byteread = 0;
- while ((byteread = stream.read(buffer)) != -1) {
- fs.write(buffer, 0, byteread);
- fs.flush();
- }
- fs.close();
- stream.close();
- }
- }
- /**
- * 列出某个目录下的所有文件,子目录不列出
- * @param folderPath:文件夹路径
- * @return
- */
- public static List<String> listFile(String folderPath){
- List<String> fileList = new ArrayList<String>(); //FileViewer.getListFiles(destPath, null, false);
- File f = new File(folderPath);
- File[] t = f.listFiles();
- for(int i = 0; i < t.length; i++){
- fileList.add(t[i].getAbsolutePath());
- }
- return fileList;
- }
- /**
- * 判断文件是否存在
- *
- * @param fileName
- * @return
- */
- public static boolean exists(String fileName) {
- File file = new File(fileName);
- if (file.exists()) {
- return true;
- } else {
- return false;
- }
- }
- /**
- * 获取文件扩展名
- *
- * @param fileName
- * @return
- * */
- public static String getFileExtendName(String fileName) {
- if (fileName == null) {
- return "";
- } else {
- return fileName.substring(fileName.lastIndexOf(".") + 1, fileName
- .length());
- }
- }
- /**
- * 创建一个新文件,如果存在则报错
- *
- * @param filePath
- * @param fileName
- * @return
- */
- public static void createFile(String filePath, String fileName)
- throws RuntimeException {
- String file = null;
- if (filePath == null) {
- file = fileName;
- } else {
- file = filePath + File.separator + fileName;
- }
- createFile(file);
- }
- /**
- * 创建一个新文件(含路径),如果存在则报错
- *
- * @param fileName
- * 含有路径的文件名
- * @return
- */
- public static void createFile(String fileName) throws RuntimeException {
- File f = new File(fileName);
- if (f.exists()) {
- throw new RuntimeException("FILE_EXIST_ERROR");
- } else {
- try {
- File fileFolder = f.getParentFile();
- if (!fileFolder.exists())
- fileFolder.mkdirs();
- f.createNewFile();
- } catch (IOException ie) {
- System.out.println("文件" + fileName + "创建失败:" + ie.getMessage());
- throw new RuntimeException("FILE_CREATE_ERROR");
- }
- }
- }
- /**
- * 创建目录,如果存在则不创建
- *
- * @param path
- * @return 返回结果null则创建成功,否则返回的是错误信息
- * @return
- */
- public static String createDir(String path, boolean isCreateSubPah) {
- String msg = null;
- File dir = new File(path);
- if (dir == null) {
- msg = "不能创建空目录";
- return msg;
- }
- if (dir.isFile()) {
- msg = "已有同名文件存在";
- return msg;
- }
- if (!dir.exists()) {
- if (isCreateSubPah && !dir.mkdirs()) {
- msg = "目录创建失败,原因不明";
- } else if (!dir.mkdir()) {
- msg = "目录创建失败,原因不明";
- }
- }
- return msg;
- }
- /**
- * 删除指定目录或文件。 如果要删除是目录,同时删除子目录下所有的文件
- *
- * @file:File 目录
- * */
- public static void delFileOrFolder(String fileName) {
- if (!exists(fileName))
- return;
- File file = new File(fileName);
- delFileOrFolder(file);
- }
- /**
- * 删除指定目录或文件。 如果要删除是目录,同时删除子目录下所有的文件
- *
- * @file:File 目录
- * */
- public static void delFileOrFolder(File file) {
- if (!file.exists())
- return;
- if (file.isFile()) {
- file.delete();
- } else {
- File[] sub = file.listFiles();
- if (sub == null || sub.length <= 0) {
- file.delete();
- } else {
- for (int i = 0; i < sub.length; i++) {
- delFileOrFolder(sub[i]);
- }
- file.delete();
- }
- }
- }
- /**
- * 从Properties格式配置文件中获取所有参数并保存到HashMap中。
- * 配置中的key值即map表中的key值,如果配置文件保存时用的中文,则返回结果也会转成中文。
- *
- * @param file
- * @return
- * @throws IOException
- */
- @SuppressWarnings("unchecked")
- public static HashMap readPropertyFile(String file, String charsetName) throws IOException {
- if (charsetName==null || charsetName.trim().length()==0){
- charsetName="gbk";
- }
- HashMap map = new HashMap();
- InputStream is =null;
- if(file.startsWith("file:"))
- is=new FileInputStream(new File(file.substring(5)));
- else
- is=FileUtils.class.getClassLoader().getResourceAsStream(file);
- Properties properties = new Properties();
- properties.load(is);
- Enumeration en = properties.propertyNames();
- while (en.hasMoreElements()) {
- String key = (String) en.nextElement();
- String code = new String(properties.getProperty(key).getBytes(
- "ISO-8859-1"), charsetName);
- map.put(key, code);
- }
- return map;
- }
- /**
- *
- * @param path
- * 文件路径
- * @param suffix
- * 后缀名
- * @param isdepth
- * 是否遍历子目录
- * @return
- */
- @SuppressWarnings("unchecked")
- public static List getListFiles(String path, String suffix, boolean isdepth) {
- File file = new File(path);
- return FileUtils.listFile(file, suffix, isdepth);
- }
- /**
- * @param f
- * @param suffix:后缀名
- * @param isdepth:是否遍历子目录
- * @return
- */
- @SuppressWarnings("unchecked")
- public static List listFile(File f, String suffix, boolean isdepth) {
- // 是目录,同时需要遍历子目录
- List<String> fileList = new ArrayList<String>();
- if (f.isDirectory() && isdepth == true) {
- File[] t = f.listFiles();
- for (int i = 0; i < t.length; i++) {
- listFile(t[i], suffix, isdepth);
- }
- } else {
- String filePath = f.getAbsolutePath();
- if (suffix != null) {
- int begIndex = filePath.lastIndexOf(".");// 最后一个.(即后缀名前面的.)的索引
- String tempsuffix = "";
- if (begIndex != -1)// 防止是文件但却没有后缀名结束的文件
- {
- tempsuffix = filePath.substring(begIndex + 1, filePath
- .length());
- }
- if (tempsuffix.equals(suffix)) {
- fileList.add(filePath);
- }
- } else {
- // 后缀名为null则为所有文件
- fileList.add(filePath);
- }
- }
- return fileList;
- }
- /**
- * 判断文件名是否带盘符,重新处理
- * @param fileName
- * @return
- */
- public static String getFileName(String fileName){
- //判断是否带有盘符信息
- // Check for Unix-style path
- int unixSep = fileName.lastIndexOf('/');
- // Check for Windows-style path
- int winSep = fileName.lastIndexOf('\\');
- // Cut off at latest possible point
- int pos = (winSep > unixSep ? winSep : unixSep);
- if (pos != -1) {
- // Any sort of path separator found...
- fileName = fileName.substring(pos + 1);
- }
- //替换上传文件名字的特殊字符
- fileName = fileName.replace("=","").replace(",","").replace("&","");
- return fileName;
- }
- public static String setFileDownloadHeader(HttpServletRequest request, String fileName)
- throws UnsupportedEncodingException
- {
- final String agent = request.getHeader("USER-AGENT");
- String filename = fileName;
- if (agent.contains("MSIE"))
- {
- // IE浏览器
- filename = URLEncoder.encode(filename, "utf-8");
- filename = filename.replace("+", " ");
- }
- else if (agent.contains("Firefox"))
- {
- // 火狐浏览器
- filename = new String(fileName.getBytes(), "ISO8859-1");
- }
- else if (agent.contains("Chrome"))
- {
- // google浏览器
- filename = URLEncoder.encode(filename, "utf-8");
- }
- else
- {
- // 其它浏览器
- filename = URLEncoder.encode(filename, "utf-8");
- }
- return filename;
- }
- }
|