Java文件操作工具類fileUtil實例【文件增刪改,復(fù)制等】
本文實例講述了Java文件操作工具類fileUtil。分享給大家供大家參考,具體如下:
package com.gcloud.common;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
/**
* 文件工具類
* Created by charlin on 2017/9/8.
*/
public class FileUtil {
/**
* 讀取文件內(nèi)容
*
* @param is
* @return
*/
public static String readFile(InputStream is) {
BufferedReader br = null;
StringBuffer sb = new StringBuffer();
try {
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String readLine = null;
while ((readLine = br.readLine()) != null) {
sb.append(readLine);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
/**
* 判斷指定的文件是否存在。
*
* @param fileName
* @return
*/
public static boolean isFileExist(String fileName) {
return new File(fileName).isFile();
}
/**
* 創(chuàng)建指定的目錄。 如果指定的目錄的父目錄不存在則創(chuàng)建其目錄書上所有需要的父目錄。
* 注意:可能會在返回false的時候創(chuàng)建部分父目錄。
*
* @param file
* @return
*/
public static boolean makeDirectory(File file) {
File parent = file.getParentFile();
if (parent != null) {
return parent.mkdirs();
}
return false;
}
/**
* 返回文件的URL地址。
*
* @param file
* @return
* @throws MalformedURLException
*/
public static URL getURL(File file) throws MalformedURLException {
String fileURL = "file:/" + file.getAbsolutePath();
URL url = new URL(fileURL);
return url;
}
/**
* 從文件路徑得到文件名。
*
* @param filePath
* @return
*/
public static String getFileName(String filePath) {
File file = new File(filePath);
return file.getName();
}
/**
* 從文件名得到文件絕對路徑。
*
* @param fileName
* @return
*/
public static String getFilePath(String fileName) {
File file = new File(fileName);
return file.getAbsolutePath();
}
/**
* 將DOS/Windows格式的路徑轉(zhuǎn)換為UNIX/Linux格式的路徑。
*
* @param filePath
* @return
*/
public static String toUNIXpath(String filePath) {
return filePath.replace("", "/");
}
/**
* 從文件名得到UNIX風(fēng)格的文件絕對路徑。
*
* @param fileName
* @return
*/
public static String getUNIXfilePath(String fileName) {
File file = new File(fileName);
return toUNIXpath(file.getAbsolutePath());
}
/**
* 得到文件后綴名
*
* @param fileName
* @return
*/
public static String getFileExt(String fileName) {
int point = fileName.lastIndexOf('.');
int length = fileName.length();
if (point == -1 || point == length - 1) {
return "";
} else {
return fileName.substring(point + 1, length);
}
}
/**
* 得到文件的名字部分。 實際上就是路徑中的最后一個路徑分隔符后的部分。
*
* @param fileName
* @return
*/
public static String getNamePart(String fileName) {
int point = getPathLastIndex(fileName);
int length = fileName.length();
if (point == -1) {
return fileName;
} else if (point == length - 1) {
int secondPoint = getPathLastIndex(fileName, point - 1);
if (secondPoint == -1) {
if (length == 1) {
return fileName;
} else {
return fileName.substring(0, point);
}
} else {
return fileName.substring(secondPoint + 1, point);
}
} else {
return fileName.substring(point + 1);
}
}
/**
* 得到文件名中的父路徑部分。 對兩種路徑分隔符都有效。 不存在時返回""。
* 如果文件名是以路徑分隔符結(jié)尾的則不考慮該分隔符,例如"/path/"返回""。
*
* @param fileName
* @return
*/
public static String getPathPart(String fileName) {
int point = getPathLastIndex(fileName);
int length = fileName.length();
if (point == -1) {
return "";
} else if (point == length - 1) {
int secondPoint = getPathLastIndex(fileName, point - 1);
if (secondPoint == -1) {
return "";
} else {
return fileName.substring(0, secondPoint);
}
} else {
return fileName.substring(0, point);
}
}
/**
* 得到路徑分隔符在文件路徑中最后出現(xiàn)的位置。 對于DOS或者UNIX風(fēng)格的分隔符都可以。
*
* @param fileName
* @return
*/
public static int getPathLastIndex(String fileName) {
int point = fileName.lastIndexOf("/");
if (point == -1) {
point = fileName.lastIndexOf("");
}
return point;
}
/**
* 得到路徑分隔符在文件路徑中指定位置前最后出現(xiàn)的位置。 對于DOS或者UNIX風(fēng)格的分隔符都可以。
*
* @param fileName
* @param fromIndex
* @return
*/
public static int getPathLastIndex(String fileName, int fromIndex) {
int point = fileName.lastIndexOf("/", fromIndex);
if (point == -1) {
point = fileName.lastIndexOf("", fromIndex);
}
return point;
}
/**
* 得到路徑分隔符在文件路徑中首次出現(xiàn)的位置。 對于DOS或者UNIX風(fēng)格的分隔符都可以。
*
* @param fileName
* @return
*/
public static int getPathIndex(String fileName) {
int point = fileName.indexOf("/");
if (point == -1) {
point = fileName.indexOf("");
}
return point;
}
/**
* 得到路徑分隔符在文件路徑中指定位置后首次出現(xiàn)的位置。 對于DOS或者UNIX風(fēng)格的分隔符都可以。
*
* @param fileName
* @param fromIndex
* @return
*/
public static int getPathIndex(String fileName, int fromIndex) {
int point = fileName.indexOf("/", fromIndex);
if (point == -1) {
point = fileName.indexOf("", fromIndex);
}
return point;
}
/**
* 將文件名中的類型部分去掉。
*
* @param filename
* @return
*/
public static String removeFileExt(String filename) {
int index = filename.lastIndexOf(".");
if (index != -1) {
return filename.substring(0, index);
} else {
return filename;
}
}
/**
* 得到相對路徑。 文件名不是目錄名的子節(jié)點時返回文件名。
*
* @param pathName
* @param fileName
* @return
*/
public static String getSubpath(String pathName, String fileName) {
int index = fileName.indexOf(pathName);
if (index != -1) {
return fileName.substring(index + pathName.length() + 1);
} else {
return fileName;
}
}
/**
* 刪除一個文件。
*
* @param filename
* @throws IOException
*/
public static void deleteFile(String filename) throws IOException {
File file = new File(filename);
if (file.isDirectory()) {
throw new IOException("IOException -> BadInputException: not a file.");
}
if (!file.exists()) {
throw new IOException("IOException -> BadInputException: file is not exist.");
}
if (!file.delete()) {
throw new IOException("Cannot delete file. filename = " + filename);
}
}
/**
* 刪除文件夾及其下面的子文件夾
*
* @param dir
* @throws IOException
*/
public static void deleteDir(File dir) throws IOException {
if (dir.isFile())
throw new IOException("IOException -> BadInputException: not a directory.");
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);
}
}
}
dir.delete();
}
/**
* 復(fù)制文件
*
* @param src
* @param dst
* @throws Exception
*/
public static void copy(File src, File dst) throws Exception {
int BUFFER_SIZE = 4096;
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream(new FileOutputStream(dst), BUFFER_SIZE);
byte[] buffer = new byte[BUFFER_SIZE];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} catch (Exception e) {
throw e;
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
in = null;
}
if (null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
out = null;
}
}
}
/**
* @復(fù)制文件,支持把源文件內(nèi)容追加到目標(biāo)文件末尾
* @param src
* @param dst
* @param append
* @throws Exception
*/
public static void copy(File src, File dst, boolean append) throws Exception {
int BUFFER_SIZE = 4096;
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream(new FileOutputStream(dst, append), BUFFER_SIZE);
byte[] buffer = new byte[BUFFER_SIZE];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} catch (Exception e) {
throw e;
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
in = null;
}
if (null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
out = null;
}
}
}
}
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java文件與目錄操作技巧匯總》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
如何使用eclipse搭建maven多module項目(構(gòu)建父子項目)
這篇文章主要介紹了如何使用eclipse搭建maven多module項目(構(gòu)建父子項目) ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12
Java Socket編程實現(xiàn)簡單的問候服務(wù)
這篇文章主要為大家介紹了Java Socket編程實現(xiàn)簡單的問候服務(wù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-01-01
五分鐘教你手寫 SpringBoot 本地事務(wù)管理實現(xiàn)
這篇文章主要介紹了五分鐘教你手寫 SpringBoot 本地事務(wù)管理實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
2020新版idea創(chuàng)建項目沒有javaEE 沒有Web選項的完美解決方法
這篇文章主要介紹了2020新版idea創(chuàng)建項目沒有javaEE 沒有Web選項的完美解決方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
Mybatis如何實現(xiàn)InsertOrUpdate功能
這篇文章主要介紹了Mybatis如何實現(xiàn)InsertOrUpdate功能,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05

