`
ErHuo
  • 浏览: 21803 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java文件操作类

阅读更多
package util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
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.Reader;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.io.IOUtils;

public class FileUtil {
	public static String getFilePath(String source_filename,
			String pointFilePath) {
		String ext = "";
		String source_filename_no_ext = source_filename;
		if (source_filename.indexOf(".") > 0) {
			ext = source_filename.substring(source_filename.lastIndexOf("."));
			source_filename_no_ext = source_filename.substring(0,
					source_filename.lastIndexOf("."));
		}

		String uploadRefPath = (pointFilePath == null || pointFilePath.trim()
				.length() == 0) ? getSystemTempPath() : pointFilePath;
		if (uploadRefPath != null
				&& !uploadRefPath
						.endsWith(System.getProperty("file.separator"))
				&& !uploadRefPath.endsWith("/")
				&& !uploadRefPath.endsWith("\\")) {
			uploadRefPath += System.getProperty("file.separator");
		}
		String uploadPath = uploadRefPath;
		File uploadDir = new File(uploadPath);
		if (!uploadDir.exists())
			uploadDir.mkdirs();
		Date today = new Date();
		String formatString = "yyyyMMddHHmmss";
		SimpleDateFormat dateformat = new SimpleDateFormat(formatString);
		String filename = source_filename_no_ext + dateformat.format(today);
		for (int i = 0; i < 10000; i++) {
			String real_filename = filename + "_" + i + ext;
			File file = new File(uploadDir, real_filename);
			if (!file.exists()) {
				return uploadRefPath + real_filename;
			}
		}
		return null;
	}

	/**
	 * 获取系统的临时目录
	 * 
	 * @return
	 */
	public static String getSystemTempPath() {
		return System.getProperty("java.io.tmpdir");
	}

	// ~ Methods add by wubing
	// -------------------------------------------------------------

	/**
	 * 获得指定配置文件属性
	 * 
	 * @param fileName
	 *            文件名称
	 * @return Properties 文件中所包含的所有属性
	 * @throws Exception
	 *             读取属性过程中的任何异常
	 */
	public static Properties getProperties(String fileName) throws Exception {
		Properties initProps = new Properties();
		InputStream in = null;

		try {
			in = getInputStream(fileName);
			initProps.load(in);
		} finally {
			try {
				if (in != null) {
					in.close();
				}
			} catch (Exception e) {
			}
		}

		return initProps;
	}

	/**
	 * 获取指定配置文件属性的读取流,读取路径为本类的CLASSLOADER或者父CLASSLOADER
	 * 
	 * @param fileName
	 *            文件名称
	 * 
	 * @return InputStream 该文件所对应的输入流
	 * @throws Exception
	 *             读取输入流过程中的任何异常
	 */
	public static InputStream getInputStream(String fileName) throws Exception {
		return getInputStream(getFile(getFileURL(fileName).getFile()));
	}

	public static InputStream getInputStream(File file) throws Exception {
		return new BufferedInputStream(new FileInputStream(file));
	}

	/**
	 * 根据文件名获取其在应用中的相对路径
	 * 
	 * @param fileName
	 *            文件名
	 * @return URL 文件在应用中的相对路径
	 * @throws Exception
	 *             获取路径过程中的任何异常
	 */
	public static URL getFileURL(String fileName) throws Exception {
		// 从本类CLASSLOADER相应路径中读取文件
		URL fileURL = FileUtil.class.getClassLoader().getResource(fileName);

		if (fileURL == null) {
			FileUtil.class.getClassLoader().getResource("/" + fileName);
		}

		if (fileURL == null) {
			Thread.currentThread().getContextClassLoader()
					.getResource(fileName);
		}

		if (fileURL == null) {
			fileURL = ClassLoader.getSystemResource(fileName);
		}

		if (fileURL == null) {
			fileURL = new File(fileName).toURL();
		}

		return fileURL;
	}

	/**
	 * 保存属性到文件
	 * 
	 * @param fileName
	 *            文件名
	 * @param prop
	 *            需存储的属性
	 * @throws Exception
	 *             存储属性过程中的任何异常
	 */
	public static void setProperties(String fileName, Properties prop)
			throws Exception {
		FileOutputStream fs = null;
		try {
			fs = new FileOutputStream(getFileURL(fileName).getFile());
			prop.store(fs, "store at " + new Date());
		} finally {
			// 关闭流
			IOUtils.closeQuietly(fs);
		}
	}

	/**
	 * 判断是否需要重新LOAD地址配置文件
	 * 
	 * @param fileName
	 *            文件名
	 * @param lastModify
	 *            原最后修改时间
	 * @return boolean 是否需要重新读取
	 * @throws Exception
	 *             判断重新LOAD过程中的任何异常
	 */
	public static boolean needReload(String fileName, long lastModify)
			throws Exception {
		// 判断文件最后更新时间,决定是否RELOAD
		if (getLastModify(fileName) > lastModify) {
			return true;
		}

		return false;
	}

	/**
	 * 根据文件名获取文件对象,在当前CLASSLOADER路径下寻找文件
	 * 
	 * @param fileName
	 *            文件名
	 * @return File 文件对象
	 * @throws Exception
	 *             获取文件过程中的任何异常
	 */
	public static File getFile(String fileName) throws Exception {
		return new File(getFileURL(fileName).getFile());
	}

	/**
	 * 获取文件最后修改时间
	 * 
	 * @param fileName
	 *            文件名
	 * @return long 文件最后修改时间
	 * @throws Exception
	 *             获取最后修改时间过程中的任何异常
	 */
	public static long getLastModify(String fileName) throws Exception {
		// 获取当前文件最新修改时间
		return getFile(fileName).lastModified();
	}

	/**
	 * 创建一个目录
	 * 
	 * @param dir
	 *            目录路径
	 * @param ignoreIfExitst
	 *            如果已经存在该目录是否忽略
	 * @return boolean 是否创建成功
	 * @throws Exception
	 *             创建目录过程中的任何异常
	 */
	public static boolean createDir(String dir, boolean ignoreIfExitst)
			throws Exception {
		File file = getFile(dir);

		if (ignoreIfExitst && file.exists()) {
			return false;
		}

		return file.mkdir();
	}

	/**
	 * 创建一个目录,如果它的父目录不存在,则自动创建
	 * 
	 * @param dir
	 *            目录路径
	 * @param ignoreIfExitst
	 *            如果已经存在该目录是否忽略
	 * @return boolean 是否创建成功
	 * @throws Exception
	 *             创建目录过程中的任何异常
	 */
	public static boolean createDirs(String dir, boolean ignoreIfExitst)
			throws Exception {
		File file = getFile(dir);

		if (ignoreIfExitst && file.exists()) {
			return false;
		}

		return file.mkdirs();
	}

	/**
	 * 删除文件
	 * 
	 * @param filename
	 *            被删除文件的文件名
	 * @return boolean 是否删除成功
	 * @throws Exception
	 *             删除文件过程中的任何异常
	 */
	public static boolean deleteFile(String filename) throws Exception {
		File file = getFile(filename);

		return deleteFile(file);
	}

	/**
	 * 删除文件
	 * 
	 * @param file
	 *            被删除文件
	 * @return boolean 是否删除成功
	 * @throws Exception
	 *             删除文件过程中的任何异常
	 */
	public static boolean deleteFile(File file) throws Exception {
		if (file.isDirectory()) {
			return deleteDir(file);
		}

		if (!file.exists()) {
			return false;
		}

		return file.delete();
	}

	/**
	 * 删除目录,包括其下的所有子目录和文件
	 * 
	 * @param dir
	 *            被删除的目录名
	 * @return boolean 是否删除成功
	 * @throws Exception
	 *             删除目录过程中的任何异常
	 */
	public static boolean deleteDir(File dir) throws Exception {
		if (dir.isFile()) {
			deleteFile(dir);
		}

		File[] files = dir.listFiles();

		if (files != null) {
			for (int i = 0; i < files.length; i++) {
				File file = files[i];

				if (file.isFile()) {
					file.delete();
				} else {
					deleteDir(file);
				}
			}
		}

		return dir.delete();
	}

	/**
	 * 使用流里的内容创建一个新文件
	 * 
	 * @param stream
	 *            原文件流
	 * @param fileName
	 *            指定的文件路径及文件名
	 * @return File 生成的新文件
	 * @throws Exception
	 *             生成文件过程中的任何异常
	 */
	public static File createFile(InputStream stream, String fileName)
			throws Exception {
		File newFile = new File(fileName);
		OutputStream fileOut = new BufferedOutputStream(new FileOutputStream(
				newFile));
		byte[] buffer = new byte[8192];
		int bytesRead = 0;

		while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
			fileOut.write(buffer, 0, bytesRead);
		}

		fileOut.close();
		stream.close();

		return newFile;
	}

	public static void createFile(String output, String content)
			throws Exception {
		try {
			OutputStreamWriter fw = new OutputStreamWriter(
					new FileOutputStream(output));
			PrintWriter out = new PrintWriter(fw);
			out.print(content);
			out.close();
			fw.close();
		} catch (Exception ex) {
			throw new Exception(ex);
		}
	}

	// 获取可写流
	public static Writer openWithWrite(String file, boolean append)
			throws Exception {
		return new BufferedWriter(
				new FileWriter(FileUtil.getFile(file), append));
	}

	// 获取可读流
	public static Reader openWithRead(String file) throws Exception {
		return new BufferedReader(new FileReader(FileUtil.getFile(file)));
	}

	// 获得文件字节流
	public static byte[] getFileBytes(InputStream inputStream) throws Exception {
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(
				1024);
		byte[] block = new byte[512];

		while (true) {
			int readLength = inputStream.read(block);

			if (readLength == -1) {
				break; // end of file
			}

			byteArrayOutputStream.write(block, 0, readLength);
		}

		byte[] retValue = byteArrayOutputStream.toByteArray();

		byteArrayOutputStream.close();

		return retValue;
	}

	// 获得文件字节流
	public static byte[] getFileBytes(String file) throws Exception {
		return getFileBytes(getInputStream(file));
	}

	public static void move(String input, String output) throws Exception {
		File inputFile = new File(input);
		File outputFile = new File(output);
		try {
			inputFile.renameTo(outputFile);
		} catch (Exception ex) {
			throw new Exception("Can not mv" + input + " to " + output
					+ ex.getMessage());
		}
	}

	public static boolean copy(String input, String output) throws Exception {
		int BUFSIZE = 0x10000;
		FileInputStream fis = new FileInputStream(input);
		FileOutputStream fos = new FileOutputStream(output);
		try {
			byte buf[] = new byte[BUFSIZE];
			int i;
			while ((i = fis.read(buf)) > -1) {
				fos.write(buf, 0, i);
			}
		} catch (Exception ex) {
			throw new Exception("makeHome" + ex.getMessage());
		} finally {
			fis.close();
			fos.close();
		}
		return true;
	}

	public static void makeHome(String home) throws Exception {
		File homedir = new File(home);
		if (!homedir.exists()) {
			try {
				homedir.mkdirs();
			} catch (Exception ex) {
				throw new Exception("Can not mkdir :" + home
						+ " Maybe include special charactor!");
			}
		}
	}

	public static void copyDir(String sourcedir, String destdir)
			throws Exception {
		File dest = new File(destdir);
		File source = new File(sourcedir);
		String files[] = source.list();
		try {
			makeHome(destdir);
		} catch (Exception ex) {
			throw new Exception("CopyDir:" + ex.getMessage());
		}
		for (int i = 0; i < files.length; i++) {
			String sourcefile = source + File.separator + files[i];
			String destfile = dest + File.separator + files[i];
			File temp = new File(sourcefile);
			if (temp.isFile()) {
				try {
					copy(sourcefile, destfile);
				} catch (Exception ex) {
					throw new Exception("CopyDir:" + ex.getMessage());
				}
			}
		}

	}

	public static void recursiveRemoveDir(File directory) throws Exception {
		if (!directory.exists()) {
			throw new IOException(directory.toString() + " do not exist!");
		}
		String filelist[] = directory.list();
		File tmpFile = null;
		for (int i = 0; i < filelist.length; i++) {
			tmpFile = new File(directory.getAbsolutePath(), filelist[i]);
			if (tmpFile.isDirectory()) {
				recursiveRemoveDir(tmpFile);
			} else if (tmpFile.isFile()) {
				try {
					tmpFile.delete();
				} catch (Exception ex) {
					throw new Exception(tmpFile.toString()
							+ " can not be deleted " + ex.getMessage());
				}
			}
		}

		try {
			directory.delete();
		} catch (Exception ex) {
			throw new Exception(directory.toString() + " can not be deleted "
					+ ex.getMessage());
		} finally {
			filelist = null;
		}
	}

	// 从远程读文件,且保存在本地
	public static boolean remoteFileRead(String sUrl, String path) {
		try {
			URL url = new URL(sUrl);
			URLConnection conn = url.openConnection();
			conn.connect();
			HttpURLConnection httpConn = (HttpURLConnection) conn;
			if (httpConn.getResponseCode() == 200) {
				System.out.println("Connect to " + sUrl
						+ " failed,return code:" + httpConn.getResponseCode());
				return false;
			}
			File file = createFile(conn.getInputStream(), path);
			return true;
		} catch (Exception ex) {
			ex.printStackTrace();
			return false;
		}
	}

	public static String getFileString(String fileName) throws Exception {
		StringBuffer sb = new StringBuffer();
		BufferedReader br = null;
		String line = null;
		try {
			br = new BufferedReader(new InputStreamReader(new FileInputStream(
					fileName)));
			while ((line = br.readLine()) != null) {
				sb.append(line + "\n");
			}
		} finally {
			// 关闭流
			IOUtils.closeQuietly(br);
		}
		return sb.toString();
	}

	public static String getFileString(String fileName, String charSet)
			throws Exception {
		StringBuffer sb = new StringBuffer();
		BufferedReader br = null;
		String line = null;
		try {
			br = new BufferedReader(new InputStreamReader(new FileInputStream(
					fileName), charSet));
			while ((line = br.readLine()) != null) {
				sb.append(line);
			}
		} finally {
			// 关闭流
			IOUtils.closeQuietly(br);
		}
		return sb.toString();
	}

	// 将文本转成流
	public static InputStream stringToInputStream(String str)
			throws UnsupportedEncodingException {
		ByteArrayInputStream stream = new ByteArrayInputStream(str
				.getBytes("UTF-8"));
		return stream;
	}

	/**
	 * 搜索文件
	 * 
	 * @param dir
	 *            起始文件夹
	 * @param s
	 * @return
	 */
	public static File[] searchFiles(String dir, String s) {
		// 起始文件夹
		File file = new File(dir);
		s = s.replace('.', '#');
		s = s.replaceAll("#", "\\\\.");
		s = s.replace('*', '#');
		s = s.replaceAll("#", ".*");
		s = s.replace('?', '#');
		s = s.replaceAll("#", ".?");
		s = "^" + s + "$";
		Pattern p = Pattern.compile(s);
		List<File> list = filePattern(file, p);
		if (list == null) {
			return null;
		}
		File[] rtn = new File[list.size()];
		list.toArray(rtn);
		return rtn;
	}

	/**
	 * @param file
	 *            File 起始文件夹
	 * @param p
	 *            Pattern 匹配类型
	 * @return ArrayList 其文件夹下的文件夹
	 */
	private static List<File> filePattern(File file, Pattern p) {
		if (file == null) {
			return null;
		} else if (file.isFile()) {
			Matcher fMatcher = p.matcher(file.getName());
			if (fMatcher.matches()) {
				List<File> list = new ArrayList<File>();
				list.add(file);
				return list;
			}
		} else if (file.isDirectory()) {
			File[] files = file.listFiles();
			if (files != null && files.length > 0) {
				List<File> list = new ArrayList<File>();
				for (int i = 0; i < files.length; i++) {
					List<File> rlist = filePattern(files[i], p);
					if (rlist != null) {
						list.addAll(rlist);
					}
				}
				return list;
			}
		}
		return null;
	}

	/**
	 * 打jar、war、zip包
	 * 
	 * @param jarFileName
	 * @param inputFilePath
	 * @param base
	 */
	public static void pack(String jarFileName, String inputFilePath,
			String base) {
		JarOutputStream jarOutputStream = null;
		try {
			File inputFile = new File(inputFilePath);
			jarOutputStream = new JarOutputStream(new FileOutputStream(
					jarFileName));
			pack(jarOutputStream, inputFile, base);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				jarOutputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	private static void pack(JarOutputStream jarOutputStream, File inputFile,
			String base) throws IOException {
		if (inputFile.isDirectory()) {
			File[] files = inputFile.listFiles();
			jarOutputStream.putNextEntry(new JarEntry(base + "/"));
			base = base.length() == 0 ? "" : base + "/";
			for (int i = 0; i < files.length; i++) {
				pack(jarOutputStream, files[i], base + files[i].getName());
			}
		} else {
			jarOutputStream.putNextEntry(new JarEntry(base));
			FileInputStream in = null;
			try {
				in = new FileInputStream(inputFile);
				int b;
				while ((b = in.read()) != -1) {
					jarOutputStream.write(b);
				}
			} finally {
				in.close();
			}
		}
	}
}

分享到:
评论

相关推荐

    java文件操作类

    java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java...

    java 文件操作类

    下面将详细讨论Java中的文件操作类和相关知识点。 1. **`java.io`包**: `java.io`包是Java中处理输入输出的核心包,包含了众多用于文件操作的类。其中,`File`类是文件和目录路径名的抽象表示,提供了大量的静态...

    JAVA文件操作类和文件夹的操作.doc

    【JAVA文件操作类和文件夹的操作】 在Java编程中,处理文件和文件夹是常见的任务。文件操作类和方法使得开发者能够创建、读取、写入、删除文件以及管理文件夹结构。以下是一些关键的Java类和方法,用于进行文件和...

    基于微信小程序的在线办公小程序答辩PPT.pptx

    基于微信小程序的在线办公小程序答辩PPT.pptx

    机器学习(预测模型):2000年至2015年期间193个国家的预期寿命和相关健康因素的数据

    这个数据集来自世界卫生组织(WHO),包含了2000年至2015年期间193个国家的预期寿命和相关健康因素的数据。它提供了一个全面的视角,用于分析影响全球人口预期寿命的多种因素。数据集涵盖了从婴儿死亡率、GDP、BMI到免疫接种覆盖率等多个维度,为研究者提供了丰富的信息来探索和预测预期寿命。 该数据集的特点在于其跨国家的比较性,使得研究者能够识别出不同国家之间预期寿命的差异,并分析这些差异背后的原因。数据集包含22个特征列和2938行数据,涉及的变量被分为几个大类:免疫相关因素、死亡因素、经济因素和社会因素。这些数据不仅有助于了解全球健康趋势,还可以辅助制定公共卫生政策和社会福利计划。 数据集的处理包括对缺失值的处理、数据类型转换以及去重等步骤,以确保数据的准确性和可靠性。研究者可以使用这个数据集来探索如教育、健康习惯、生活方式等因素如何影响人们的寿命,以及不同国家的经济发展水平如何与预期寿命相关联。此外,数据集还可以用于预测模型的构建,通过回归分析等统计方法来预测预期寿命。 总的来说,这个数据集是研究全球健康和预期寿命变化的宝贵资源,它不仅提供了历史数据,还为未来的研究和政策制

    基于微信小程序的“健康早知道”微信小程序答辩PPT.pptx

    基于微信小程序的“健康早知道”微信小程序答辩PPT.pptx

    基于微信小程序的电影交流平台答辩PPT.pptx

    基于微信小程序的电影交流平台答辩PPT.pptx

    计算机字符编码GB18030.PDF

    计算机字符编码GB18030

    Hive 操作基础(进阶版)多级分区数据文件2

    Hive 操作基础(进阶版)多级分区数据文件2

    基于java的贫困生管理系统答辩PPT.pptx

    基于java的贫困生管理系统答辩PPT.pptx

    pandas-2.1.4-cp312-cp312-win_amd64.zip

    pandas whl安装包,对应各个python版本和系统(具体看资源名字),找准自己对应的下载即可! 下载后解压出来是已.whl为后缀的安装包,进入终端,直接pip install pandas-xxx.whl即可,非常方便。 再也不用担心pip联网下载网络超时,各种安装不成功的问题。

    TA_Lib轮子无需编译-TA_Lib-0.4.18-cp38-cp38-win32.whl.zip

    TA_lib库(whl轮子),直接pip install安装即可,下载即用,非常方便,各个python版本对应的都有。 使用方法: 1、下载下来解压; 2、确保有python环境,命令行进入终端,cd到whl存放的目录,直接输入pip install TA_lib-xxxx.whl就可以安装,等待安装成功,即可使用! 优点:无需C++环境编译,下载即用,方便

    课设毕设基于SpringBoot+Vue的瑜伽体验课预约系统源码可运行.zip

    本压缩包资源说明,你现在往下拉可以看到压缩包内容目录 我是批量上传的基于SpringBoot+Vue的项目,所以描述都一样;有源码有数据库脚本,系统都是测试过可运行的,看文件名即可区分项目~ |Java|SpringBoot|Vue|前后端分离| 开发语言:Java 框架:SpringBoot,Vue JDK版本:JDK1.8 数据库:MySQL 5.7+(推荐5.7,8.0也可以) 数据库工具:Navicat 开发软件: idea/eclipse(推荐idea) Maven包:Maven3.3.9+ 系统环境:Windows/Mac

    tornado-6.2b2.tar.gz

    tornado-6.2b2.tar.gz

    javawe论坛项目 原生技术

    javawe论坛项目 原生技术

    tornado-6.2b1-cp310-cp310-macosx_10_9_universal2.whl

    tornado-6.2b1-cp310-cp310-macosx_10_9_universal2.whl

    基于司机信用评价的货运管理系统(springboot+vue+mysql+说明文档).zip

    随着物流行业的快速发展,货运管理变得愈发重要。为了提高货运效率,确保货物安全,我们开发了这款基于司机信用评价的货运管理系统。 该系统主要包含了货物信息管理、订单评价管理、货主管理等多个功能模块。在货物信息管理模块中,用户可以查看和管理货物的详细信息,包括货物名称、规格、装车状态、运输状态以及卸货状态等,方便用户随时掌握货物的动态。 订单评价管理模块是该系统的核心之一,它允许货主对司机的服务进行评价,系统会根据评价数据对司机进行信用评分。这一功能不仅有助于提升司机的服务质量,还能为货主提供更加可靠的货运选择。 此外,货主管理模块提供了货主信息的录入、修改和查询等功能,方便用户管理自己的货主资料。系统界面简洁明了,以蓝色为主色调,设计现代且专业,为用户提供了良好的使用体验。 通过该系统,用户可以轻松实现货物信息的查看和管理,对司机的服务进行评价,提高货运效率和服务质量。同时,系统也为司机提供了一个展示自我、提升信用的平台,有助于推动物流行业的健康发展。

    毕业生交流学习平台 SSM毕业设计 附带论文.zip

    毕业生交流学习平台 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B

    基于java的广场舞团答辩PPT.pptx

    基于java的广场舞团答辩PPT.pptx

Global site tag (gtag.js) - Google Analytics