All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jd.blockchain.utils.io.FileUtils Maven / Gradle / Ivy

The newest version!
package com.jd.blockchain.utils.io;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Properties;

import com.jd.blockchain.utils.PathUtils;

import org.springframework.core.io.ClassPathResource;
import org.springframework.util.ResourceUtils;

/**
 * @author haiq
 *
 */
public class FileUtils {

	public static final String DEFAULT_CHARSET = "UTF-8";

	public static boolean existFile(String filePath) {
		File file = new File(filePath);
		return file.isFile();
	}

	public static boolean existDirectory(String dir) {
		File file = new File(dir);
		return file.isDirectory();
	}

	public static boolean makeDirectory(String dir) {
		File file = new File(dir);
		return file.mkdirs();
	}

	/**
	 * 返回完整的绝对路径;
	 * 
	 * @param path path
	 * @return String
	 */
	public static String getFullPath(String path) {
		try {
			File file = new File(path);
			return file.getCanonicalPath();
		} catch (IOException e) {
			throw new IllegalStateException(e.getMessage(), e);
		}
	}

	/**
	 * 返回父目录的路径;
	 * 
	 * @param path path
	 * @return String
	 */
	public static String getParent(String path) {
		File file = new File(path);
		return file.getParent();
	}

	/**
	 * 以默认字符集(UTF-8)读取指定文件的首行;
	 * 
	 * @param file file
	 * @return String
	 * @throws IOException exception
	 */
	public static String readFirstLine(File file) throws IOException {
		return readFirstLine(file, DEFAULT_CHARSET);
	}

	/**
	 * 读取指定文件的首行;
	 * 
	 * @param file    file
	 * @param charset 字符集;
	 * @return 返回首行非空行;返回结果不会自动截取两头的空字符串;
	 * @throws IOException exception
	 */
	public static String readFirstLine(File file, String charset) throws IOException {
		FileInputStream in = new FileInputStream(file);
		try {
			InputStreamReader reader = new InputStreamReader(in, charset);
			return getFirstLine(reader);
		} finally {
			in.close();
		}
	}

	public static String[] readLines(File file) {
		return readLines(file, DEFAULT_CHARSET);
	}

	/**
	 * 返回指定文件的所有行;
	 * 
	 * @param file    file
	 * @param charset 字符集;
	 * @return 返回首行非空行;返回结果不会自动截取两头的空字符串;
	 */
	public static String[] readLines(File file, String charset) {
		try (FileInputStream in = new FileInputStream(file);
				InputStreamReader reader = new InputStreamReader(in, charset);) {
			return getLines(reader);
		} catch (IOException e) {
			throw new RuntimeIOException(e.getMessage(), e);
		}
	}

	public static void writeLines(String[] lines, File file) {
		writeLines(lines, file, DEFAULT_CHARSET);
	}

	public static void writeLines(String[] lines, File file, String charset) {
		try (FileOutputStream out = new FileOutputStream(file, false);
				OutputStreamWriter writer = new OutputStreamWriter(out, charset);
				BufferedWriter bfw = new BufferedWriter(writer);) {
			for (String line : lines) {
				writer.write(line);
				writer.write("\r\n");
			}

			bfw.flush();
			writer.flush();
			out.flush();
		} catch (IOException e) {
			throw new RuntimeIOException(e.getMessage(), e);
		}
	}

	public static String getFirstLine(Reader reader) throws IOException {
		BufferedReader bfr = reader instanceof BufferedReader ? (BufferedReader) reader : new BufferedReader(reader);
		try {
			String line = null;
			while ((line = bfr.readLine()) != null) {
				return line;
			}
			return null;
		} finally {
			bfr.close();
		}
	}

	public static String[] getLines(Reader reader) throws IOException {
		BufferedReader bfr = reader instanceof BufferedReader ? (BufferedReader) reader : new BufferedReader(reader);
		try {
			ArrayList lines = new ArrayList();
			String line = null;
			while ((line = bfr.readLine()) != null) {
				lines.add(line);
			}
			return lines.toArray(new String[lines.size()]);
		} finally {
			bfr.close();
		}
	}

	/**
	 * 以默认字符集(UTF-8)将指定的文本保存到指定的文件中;
	 * 
	 * @param file 要保存的文件;
	 * @param text 文本内容;
	 */
	public static void writeText(String text, File file) {
		writeText(text, file, DEFAULT_CHARSET);
	}

	/**
	 * 将指定的文本保存到指定的文件中;
	 * 
	 * @param text    文本内容;
	 * @param file    要保存的文件;
	 * @param charset 字符集;
	 */
	public static void writeText(String text, File file, String charset) {
		try (FileOutputStream out = new FileOutputStream(file, false)) {
			writeText(text, out, charset);
			out.flush();
		} catch (IOException e) {
			throw new RuntimeIOException(e.getMessage(), e);
		}
	}

	public static void writeBytes(byte[] content, File file) {
		try (FileOutputStream out = new FileOutputStream(file, false)) {
			out.write(content);
			out.flush();
		} catch (IOException e) {
			throw new RuntimeIOException(e.getMessage(), e);
		}
	}

	public static void appendBytes(byte[] content, File file) {
		try (FileOutputStream out = new FileOutputStream(file, true)) {
			out.write(content);
			out.flush();
		} catch (IOException e) {
			throw new RuntimeIOException(e.getMessage(), e);
		}
	}

	public static void writeText(String text, OutputStream out, String charset) {
		try (OutputStreamWriter writer = new OutputStreamWriter(out, charset);) {
			writer.write(text);
			writer.flush();
		} catch (IOException e) {
			throw new RuntimeIOException(e.getMessage(), e);
		}
	}
	
	public static void writeProperties(Properties props, File file) {
		try (FileOutputStream out = new FileOutputStream(file, false)) {
			writeProperties(props, out, DEFAULT_CHARSET);
			out.flush();
		} catch (IOException e) {
			throw new RuntimeIOException(e.getMessage(), e);
		}
	}
	
	public static void writeProperties(Properties props, File file, String charset) {
		try (FileOutputStream out = new FileOutputStream(file, false)) {
			writeProperties(props, out, charset);
			out.flush();
		} catch (IOException e) {
			throw new RuntimeIOException(e.getMessage(), e);
		}
	}

	public static void writeProperties(Properties props, OutputStream out) {
		writeProperties(props, out, DEFAULT_CHARSET);
	}

	public static void writeProperties(Properties props, OutputStream out, String charset) {
		try (OutputStreamWriter writer = new OutputStreamWriter(out, charset);) {
			props.store(writer, null);
			writer.flush();
		} catch (IOException e) {
			throw new RuntimeIOException(e.getMessage(), e);
		}
	}

	/**
	 * 以默认字符集(UTF-8)从文件读取文本;
	 * 
	 * @param file file
	 * @return String
	 */
	public static String readText(String filePath) {
		try {
			File file = ResourceUtils.getFile(filePath);
			return readText(file, DEFAULT_CHARSET);
		} catch (FileNotFoundException e) {
			throw new RuntimeIOException(e.getMessage(), e);
		}
	}

	/**
	 * 从文件读取文本;
	 * 
	 * @param file    file
	 * @param charset charset
	 * @return String
	 */
	public static String readText(String file, String charset) {
		return readText(new File(file), charset);
	}

	/**
	 * 以默认字符集(UTF-8)从文件读取文本;
	 * 
	 * @param file file
	 * @return String
	 */
	public static String readText(File file) {
		return readText(file, DEFAULT_CHARSET);
	}

	/**
	 * 从文件读取文本;
	 * 
	 * @param file    file
	 * @param charset charset
	 * @return String
	 */
	public static String readText(File file, String charset) {
		try {
			FileInputStream in = new FileInputStream(file);
			try {
				return readText(in, charset);
			} finally {
				in.close();
			}
		} catch (IOException e) {
			throw new RuntimeIOException(e.getMessage(), e);
		}
	}

	public static String readText(InputStream in) throws IOException {
		return readText(in, DEFAULT_CHARSET);
	}

	/**
	 * 从流读取文本;
	 * 
	 * @param in      in
	 * @param charset charset
	 * @return String
	 * @throws IOException exception
	 */
	public static String readText(InputStream in, String charset) throws IOException {
		InputStreamReader reader = new InputStreamReader(in, charset);
		try {
			StringBuilder content = new StringBuilder();
			char[] buffer = new char[64];
			int len = 0;
			while ((len = reader.read(buffer)) > 0) {
				content.append(buffer, 0, len);
			}
			return content.toString();
		} finally {
			reader.close();
		}
	}

	public static byte[] readBytes(String file) {
		try {
			FileInputStream in = new FileInputStream(file);
			try {
				return BytesUtils.copyToBytes(in);
			} finally {
				in.close();
			}
		} catch (IOException e) {
			throw new RuntimeIOException(e.getMessage(), e);
		}
	}

	public static byte[] readBytes(File file) {
		try {
			FileInputStream in = new FileInputStream(file);
			try {
				return BytesUtils.copyToBytes(in);
			} finally {
				in.close();
			}
		} catch (IOException e) {
			throw new RuntimeIOException(e.getMessage(), e);
		}
	}

	public static Properties readProperties(String file) {
		return readProperties(file, DEFAULT_CHARSET);
	}

	public static Properties readProperties(File file) {
		return readProperties(file, DEFAULT_CHARSET);
	}

	public static Properties readProperties(String file, String charset) {
		try {
			FileInputStream in = new FileInputStream(file);
			try {
				return readProperties(in, charset);
			} finally {
				in.close();
			}
		} catch (IOException e) {
			throw new RuntimeIOException(e.getMessage(), e);
		}
	}

	public static Properties readProperties(File file, String charset) {
		try {
			FileInputStream in = new FileInputStream(file);
			try {
				return readProperties(in, charset);
			} finally {
				in.close();
			}
		} catch (IOException e) {
			throw new RuntimeIOException(e.getMessage(), e);
		}
	}

	public static Properties readProperties(InputStream in) {
		return readProperties(in, DEFAULT_CHARSET);
	}

	public static Properties readProperties(InputStream in, String charset) {
		try {
			InputStreamReader reader = new InputStreamReader(in, charset);
			try {
				Properties props = new Properties();
				props.load(reader);
				return props;
			} finally {
				reader.close();
			}
		} catch (IOException e) {
			throw new RuntimeIOException(e.getMessage(), e);
		}
	}

	public static Properties readPropertiesAndClose(InputStream in) {
		return readPropertiesAndClose(in, DEFAULT_CHARSET);
	}

	public static Properties readPropertiesAndClose(InputStream in, String charset) {
		try {
			InputStreamReader reader = new InputStreamReader(in, charset);
			try {
				Properties props = new Properties();
				props.load(reader);
				return props;
			} finally {
				reader.close();
			}
		} catch (IOException e) {
			throw new RuntimeIOException(e.getMessage(), e);
		} finally {
			try {
				in.close();
			} catch (IOException e) {
				throw new RuntimeIOException(e.getMessage(), e);
			}
		}
	}

	/**
	 * 根据byte数组,生成文件 filePath 文件路径 fileName 文件名称(需要带后缀,如*.jar)
	 */
	public static File getFile(byte[] bfile, String filePath, String fileName) {
		BufferedOutputStream bos = null;
		FileOutputStream fos = null;
		File file = null;
		try {
			File dir = new File(filePath);
			if (!dir.exists()) {// 判断文件目录是否存在
				dir.mkdirs();
			}
			file = new File(filePath + File.separator + fileName);
			fos = new FileOutputStream(file);
			bos = new BufferedOutputStream(fos);
			bos.write(bfile);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (bos != null) {
				try {
					bos.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
			if (fos != null) {
				try {
					fos.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		}
		return file;
	}

	public static String getCurrentDir() {
		try {
			return new File("./").getCanonicalPath();
		} catch (IOException e) {
			throw new IllegalStateException(e.getMessage(), e);
		}
	}

	public static void deleteFile(String dir) {
		deleteFile(dir, false);
	}

	public static void deleteFile(File file) {
		deletePath(file, false);
	}

	public static void deleteFile(String dir, boolean silent) {
		File directory = new File(dir);
		deletePath(directory, silent);
	}

	/**
	 * 删除文件;
* * @param path 如果指定的路径是单个文件,则删除该文件;如果指定路径是目录,则删除该目录及其下的全部文件; * @param silent 是否静默删除;如果为 true ,则吞噬删除过程中的异常, 意味着方法即便正常返回时也有可能删除不完全; * @return 如果删除成功,则返回 true; 否则返回 false,或者抛出 {@link RuntimeIOException}; */ public static boolean deletePath(File path, boolean silent) { if (path.isFile()) { try { path.delete(); return true; } catch (Exception e) { if (!silent) { throw new RuntimeIOException(e.getMessage(), e); } } return false; } // delete dir; File[] files = path.listFiles(); if (files == null) { return false; } for (File f : files) { deletePath(f, silent); } return path.delete(); } /** * 获取指定路径和位置的文件信息; *

* * 对于打包到 jar 包中的资源文件,此操作将引发 FileNotFoundException 异常,需要通过流的方式来加载; * * @param resourceLocation 文件位置信息,可支持绝对路径、相对路径(相对dir)、classpath:前缀; * 如果指定了绝对路径或者类路径,则忽略目录参数 dir; * @param parentDir 父目录的路径,不要以"/"结尾; 可选参数; * @return * * @throws FileNotFoundException */ public static File getFile(String resourceLocation, String parentDir) throws FileNotFoundException { if (resourceLocation.startsWith(ResourceUtils.CLASSPATH_URL_PREFIX)) { // 对于打包到 jar 包中的资源文件,此操作将引发异常,需要通过流的方式来加载; return ResourceUtils.getFile(resourceLocation); } if (resourceLocation.startsWith(PathUtils.PATH_SEPERATOR)) { return new File(resourceLocation); } String totalPath = PathUtils.concatPaths(parentDir, resourceLocation); return new File(totalPath); } /** * 获取指定路径和位置的文件信息; *

* * 对于打包到 jar 包中的资源文件,此操作将引发 FileNotFoundException 异常,需要通过流的方式来加载; * * @param resourceLocation 文件位置信息,可支持绝对路径、相对路径(相对dir)、classpath:前缀; * 如果指定了绝对路径或者类路径,则忽略目录参数 dir; * @param parentDir 父目录的路径,不要以"/"结尾; 可选参数; * @return * * @throws FileNotFoundException */ public static InputStream read(String resourceLocation, String parentDir) { try { if (resourceLocation.startsWith(ResourceUtils.CLASSPATH_URL_PREFIX)) { // 对于打包到 jar 包中的资源文件,此操作将引发异常,需要通过流的方式来加载; String path = resourceLocation.substring(ResourceUtils.CLASSPATH_URL_PREFIX.length()); ClassPathResource resource = new ClassPathResource(path); return resource.getInputStream(); } if (resourceLocation.startsWith(PathUtils.PATH_SEPERATOR)) { return new FileInputStream(new File(resourceLocation)); } String totalPath = PathUtils.concatPaths(parentDir, resourceLocation); return new FileInputStream(new File(totalPath)); } catch (IOException e) { throw new RuntimeIOException(e.getMessage(), e); } } /** * 获取指定路径和位置的文件信息; *

* * 对于打包到 jar 包中的资源文件,此操作将引发 FileNotFoundException 异常,需要通过流的方式来加载; * * @param resourceLocation 文件位置信息,可支持绝对路径、相对路径(相对dir)、classpath:前缀; * 如果指定了绝对路径或者类路径,则忽略目录参数 dir; * @param parentDir 父目录的路径,不要以"/"结尾; 可选参数; * @return * * @throws FileNotFoundException */ public static Properties readPropertiesResouce(String resourceLocation, String parentDir) throws FileNotFoundException { try { InputStream in = read(resourceLocation, parentDir); try { return readProperties(in, DEFAULT_CHARSET); } finally { in.close(); } } catch (IOException e) { throw new RuntimeIOException(e.getMessage(), e); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy