在平时编码过程中,对文件的操作时比较频繁的,下面我们总结了一些平时经常使用到的功能。可以将下面所有的方法都维护在一个类里面,在项目中当作公共类来使用。
package net.haicoder;
import java.io.File;
/**
* @author 嗨客网
* @description
*/
public class FileUtil {
/**
* 新建目录,会自动创建父目录(父目录不存在的时候)
*
* @param folderPath
* @return boolean
*/
public static boolean mkDirs(String folderPath) {
try {
File folder = new File(folderPath);
if (!folder.exists()) {
return folder.mkdirs();
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
package net.haicoder;
import java.io.File;
/**
* @author 嗨客网
* @description
*/
public class FileUtil {
/**
* 删除文件夹(包括文件夹下所有文件)或者文件
* @param path
* @return
*/
public static void delFile(String path) {
File folder = new File(path);
delFile(folder);
}
/**
* 删除文件夹(包括文件夹下所有文件)或者文件
* @param file
*/
public static void delFile(File file) {
if (file.isDirectory()) {
for (File childFile : file.listFiles()) {
if (childFile.isFile()) {
childFile.delete();
} else if (childFile.isDirectory()) {
delFile(childFile);
}
}
}
file.delete();
}
}
package net.haicoder;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
/**
* @author 嗨客网
* @description
*/
public class FileUtil {
/**
* 对文件一行一行处理
* @param filePathAndName 本地文件地址
* @param skipFirst 是否跳过第一行
* @param callback 处理接口
* @return
*/
public static void readLine(String filePathAndName, boolean skipFirst, LineCallback callback) {
File file = new File(filePathAndName);
if (!file.exists() || file.isDirectory()) {
System.out.println("file is error, filePathAndName: " + filePathAndName);
return;
}
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(file);
br = new BufferedReader(fr);
String line = null;
if (skipFirst) {// 跳过第一行
line = br.readLine();
}
while ((line = br.readLine()) != null) {
callback.callBack(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fr != null) {
fr.close();
}
if (br != null) {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 业务可以自己定义实现逻辑类来处理
*/
public interface LineCallback {
/**
* @param line
* @return
*/
void callBack(String line);
}
}
package net.haicoder;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
/**
* @author 嗨客网
* @description
*/
public class FileUtil {
/**
* 超时时间
*/
public static final int CONN_TIMEOUT_PERIOD = 10 * 1000;
public static final int READ_TIMEOUT_PERIOD = 10 * 1000;
private static final String PATH = File.separator;
private static int CACHE_BYTES = 1024 * 30;
/**
* 网络文件下载,不支持断点续传
* @param fileUrl 网络文件地址
* @param localPath 下载到本地位置
*/
public static void downloadNetFile(String fileUrl, String localPath, String fileName) {
URL url = null;
try {
url = new URL(fileUrl);
} catch (MalformedURLException e) {
e.printStackTrace();
}
HttpURLConnection httpURLConnection = null;
InputStream inputStream = null;
RandomAccessFile outputStream = null;
try {
httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setConnectTimeout(CONN_TIMEOUT_PERIOD);
httpURLConnection.setReadTimeout(READ_TIMEOUT_PERIOD);
httpURLConnection.setRequestMethod("GET");
httpURLConnection.setRequestProperty("User-Agent", "JD");
httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
//新建目录,在上面方法中已经定义
mkDirs(localPath);
// 使用java中的RandomAccessFile 对文件进行随机读写操作
if (!localPath.endsWith(PATH)) {
localPath = localPath + PATH;
}
File outFile = new File(localPath + fileName);
outputStream = new RandomAccessFile(outFile, "rwd");
int code = httpURLConnection.getResponseCode();
String contentType = httpURLConnection.getContentType();
if (!contentType.toLowerCase().startsWith("application/")) {
throw new IllegalArgumentException("content type error, mime: " + contentType);
}
if (code == 200) {
inputStream = httpURLConnection.getInputStream();
byte[] buf = new byte[CACHE_BYTES];
int read = 0;
while (true) {
read = inputStream.read(buf);
if (read == -1) {
break;
}
outputStream.write(buf, 0, read);
}
} else {
throw new IllegalArgumentException("response code error, code: " + 200);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
if (outputStream != null) {
outputStream.close();
}
if (httpURLConnection != null) {
httpURLConnection.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}