---初始化项目
This commit is contained in:
@ -0,0 +1,349 @@
|
||||
package com.pictc.utils;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.Closeable;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.FileReader;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.io.Reader;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.Socket;
|
||||
import java.net.URLDecoder;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ForkJoinPool;
|
||||
import java.util.concurrent.ForkJoinTask;
|
||||
import java.util.concurrent.RecursiveTask;
|
||||
|
||||
|
||||
public class IoUtils {
|
||||
|
||||
private final static Charset charset=Charset.forName("UTF-8");
|
||||
|
||||
private final static ForkJoinPool forkJoinPool = new ForkJoinPool();
|
||||
|
||||
public static void closeQuietly(Closeable... closeables) {
|
||||
if (closeables == null)
|
||||
return;
|
||||
|
||||
for (Closeable closeable : closeables) {
|
||||
if (closeable == null)
|
||||
return;
|
||||
|
||||
try {
|
||||
closeable.close();
|
||||
} catch (IOException ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// In JDK 1.6, java.net.Socket doesn't implement Closeable, so we have this
|
||||
// overload.
|
||||
public static void closeQuietly(final Socket... sockets) {
|
||||
if (sockets == null)
|
||||
return;
|
||||
|
||||
for (Socket socket : sockets) {
|
||||
if (socket == null)
|
||||
return;
|
||||
|
||||
try {
|
||||
socket.close();
|
||||
} catch (IOException ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Returns the text read from the given reader as a String. Closes the given
|
||||
* reader upon return.
|
||||
*/
|
||||
public static String getText(Reader reader) throws IOException {
|
||||
try {
|
||||
StringBuilder source = new StringBuilder();
|
||||
BufferedReader buffered = new BufferedReader(reader);
|
||||
String line = buffered.readLine();
|
||||
|
||||
while (line != null) {
|
||||
source.append(line);
|
||||
source.append('\n');
|
||||
line = buffered.readLine();
|
||||
}
|
||||
|
||||
return source.toString();
|
||||
} finally {
|
||||
closeQuietly(reader);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the text read from the given file as a String.
|
||||
*/
|
||||
public static String getText(File path) throws IOException {
|
||||
return getText(new FileReader(path));
|
||||
}
|
||||
|
||||
|
||||
public static String getText(InputStream stream) throws IOException {
|
||||
return getText(new InputStreamReader(stream,charset));
|
||||
}
|
||||
|
||||
public static String getText(InputStream stream,Charset charset) throws IOException {
|
||||
return getText(new InputStreamReader(stream,charset));
|
||||
}
|
||||
|
||||
public static void createDirectory(File dir) throws IOException {
|
||||
if (!dir.exists()) {
|
||||
dir.mkdirs();
|
||||
}
|
||||
}
|
||||
|
||||
public static void copyStream(InputStream in, OutputStream out) throws IOException {
|
||||
byte[] buffer = new byte[8192];
|
||||
|
||||
try {
|
||||
int read = in.read(buffer);
|
||||
while (read > 0) {
|
||||
out.write(buffer, 0, read);
|
||||
read = in.read(buffer);
|
||||
}
|
||||
} finally {
|
||||
closeQuietly(in, out);
|
||||
}
|
||||
}
|
||||
|
||||
public static void copyFile(File source, File target) throws FileNotFoundException, IOException {
|
||||
if (!source.isFile())
|
||||
throw new IOException(
|
||||
String.format("Error copying file %s to %s; source file does not exist", source, target));
|
||||
|
||||
createDirectory(target.getParentFile());
|
||||
doCopyFile(source, target);
|
||||
checkSameSize(source, target);
|
||||
}
|
||||
|
||||
public static List<File> listFilesRecursively(File baseDir) throws IOException {
|
||||
if (!baseDir.exists())
|
||||
return Collections.emptyList();
|
||||
|
||||
List<File> result = new ArrayList<File>();
|
||||
doListFilesRecursively(baseDir, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static String getFileExtension(String filename) {
|
||||
int index = filename.lastIndexOf('.');
|
||||
return index == -1 ? null : filename.substring(index + 1, filename.length());
|
||||
}
|
||||
|
||||
public static void createFile(File file) throws IOException {
|
||||
if(!file.exists()) {
|
||||
if(file.isDirectory()) {
|
||||
file.mkdirs();
|
||||
}else {
|
||||
file.getParentFile().mkdirs();
|
||||
file.createNewFile();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void doListFilesRecursively(File baseDir, List<File> result) throws IOException {
|
||||
List<File> dirs = new ArrayList<File>();
|
||||
File[] files = baseDir.listFiles();
|
||||
if (files == null) {
|
||||
throw new IOException("Failed to list files of directory '" + baseDir + "'");
|
||||
}
|
||||
for (File file : files) {
|
||||
if (file.isFile()) {
|
||||
result.add(file);
|
||||
} else {
|
||||
dirs.add(file);
|
||||
}
|
||||
}
|
||||
for (File dir : dirs) {
|
||||
doListFilesRecursively(dir, result);
|
||||
}
|
||||
}
|
||||
|
||||
private static void doCopyFile(File source, File target) throws IOException {
|
||||
FileInputStream in = null;
|
||||
FileOutputStream out = null;
|
||||
|
||||
try {
|
||||
in = new FileInputStream(source);
|
||||
out = new FileOutputStream(target);
|
||||
// instead of checking transferred size, we'll compare file sizes in
|
||||
// checkSameSize()
|
||||
in.getChannel().transferTo(0, Long.MAX_VALUE, out.getChannel());
|
||||
} finally {
|
||||
closeQuietly(in, out);
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkSameSize(File source, File target) throws IOException {
|
||||
long fromSize = source.length();
|
||||
long toSize = target.length();
|
||||
|
||||
if (fromSize != toSize)
|
||||
throw new IOException(
|
||||
String.format("Error copying file %s to %s; source file size is %d, but target file size is %d",
|
||||
source, target, fromSize, toSize));
|
||||
}
|
||||
|
||||
public static byte[] getBytes(InputStream in) throws IOException {
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
copyStream(in, out);
|
||||
return out.toByteArray();
|
||||
}
|
||||
|
||||
public static byte[] getBytes(File in) throws IOException {
|
||||
return getBytes(new FileInputStream(in));
|
||||
}
|
||||
|
||||
public static void streamToFile(InputStream in, File file) throws IOException {
|
||||
if (!file.exists()) {
|
||||
//createDirectory(file.getParentFile());
|
||||
file.createNewFile();// 将压缩文件内容写入到这个文件中
|
||||
}
|
||||
FileOutputStream fos = new FileOutputStream(file);
|
||||
int count;
|
||||
byte[] buf = new byte[8192];
|
||||
while ((count = in.read(buf)) != -1) {
|
||||
fos.write(buf, 0, count);
|
||||
}
|
||||
fos.flush();
|
||||
closeQuietly(in, fos);
|
||||
}
|
||||
|
||||
public static void byteToFile(byte[] bytes, File file) throws IOException {
|
||||
if (!file.exists()) {
|
||||
//createDirectory(file.getParentFile());
|
||||
file.createNewFile();// 将压缩文件内容写入到这个文件中
|
||||
}
|
||||
FileOutputStream fos = new FileOutputStream(file);
|
||||
fos.write(bytes);
|
||||
fos.flush();
|
||||
closeQuietly(fos);
|
||||
}
|
||||
|
||||
public static void writeFile(File file, OutputStream out, boolean close) throws IOException {
|
||||
FileInputStream in = null;
|
||||
try {
|
||||
in = new FileInputStream(file);
|
||||
int count;
|
||||
byte[] buf = new byte[8192];
|
||||
while ((count = in.read(buf)) != -1) {
|
||||
out.write(buf, 0, count);
|
||||
}
|
||||
out.flush();
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
closeQuietly(in);
|
||||
if (close) {
|
||||
closeQuietly(out);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static class FileSizeFinder extends RecursiveTask<Long> {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
final File file;
|
||||
public FileSizeFinder(final File theFile) {
|
||||
file = theFile;
|
||||
}
|
||||
@Override
|
||||
public Long compute() {
|
||||
long size = 0;
|
||||
if (file.isFile()) {
|
||||
size = file.length();
|
||||
} else {
|
||||
final File[] children = file.listFiles();
|
||||
if (children != null) {
|
||||
List<ForkJoinTask<Long>> tasks = new ArrayList<ForkJoinTask<Long>>();
|
||||
for (final File child : children) {
|
||||
if (child.isFile()) {
|
||||
size += child.length();
|
||||
} else {
|
||||
tasks.add(new FileSizeFinder(child));
|
||||
}
|
||||
}
|
||||
for (final ForkJoinTask<Long> task : invokeAll(tasks)) {
|
||||
size += task.join();
|
||||
}
|
||||
}
|
||||
}
|
||||
return size;
|
||||
}
|
||||
}
|
||||
|
||||
public static long getFileSize(File file) {
|
||||
return forkJoinPool.invoke(new FileSizeFinder(file));
|
||||
}
|
||||
|
||||
public static String getProjectPath() {
|
||||
String url=Thread.currentThread().getContextClassLoader().getResource("").getPath();
|
||||
try {
|
||||
url=url.substring(1, url.length()-15);
|
||||
if(url.contains("/targe")) {
|
||||
url = url.replace("/targe","");
|
||||
}
|
||||
return URLDecoder.decode(url,"utf-8");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
public static void delFile(File file) {
|
||||
if(file.isDirectory()) {
|
||||
File[] childs = file.listFiles();
|
||||
if(childs!=null) {
|
||||
for (int i = 0; i < childs.length; i++) {
|
||||
if(childs[i].isDirectory()) {
|
||||
delFile(childs[i]);
|
||||
}else {
|
||||
childs[i].delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
file.delete();
|
||||
}
|
||||
|
||||
public static List<File> findFile(File file,FilenameFilter filter) {
|
||||
List<File> res = new ArrayList<File>();
|
||||
findChilds(res, file, filter);
|
||||
return res;
|
||||
}
|
||||
|
||||
private static void findChilds(List<File> res,File file,FilenameFilter filter) {
|
||||
if(file.isDirectory()) {
|
||||
File[] delFiles=file.listFiles(filter);
|
||||
for (int i = 0; i < delFiles.length; i++) {
|
||||
res.add(delFiles[i]);
|
||||
}
|
||||
File[] childs= file.listFiles();
|
||||
for (int i = 0; i < childs.length; i++) {
|
||||
findChilds(res,childs[i],filter);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user