java自己封裝檔案處理
主要封裝了用位元組流和字元流讀取檔案、寫入檔案、拷貝檔案和拷貝資料夾四個功能。
public class myFileIO {
private final int DATA_LENGTH = 1024;
/**
* 讀取指定位置的檔案內容,返回字串
*
* @param srcFilePath 檔案的路徑
* @return 檔案的內容
*/
public String readFile(String srcFilePath) {
StringBuilder sb = new StringBuilder();
//1.建立file物件
File src = new File(srcFilePath);
return readFile(src);
}
/**
* 讀取指定檔案物件的內容到String中
*
* @param src 要讀取的檔案物件
* @return 檔案的內容
*/
public String readFile(File src) {
StringBuilder sb = new StringBuilder();
//1.建立file物件
if (!src.isFile()) {
System.out.println("不是檔案,無法讀取");
return null;
}
//2.選擇流
InputStream is = null;
try {
is = new BufferedInputStream(new FileInputStream(src));
//3.讀取
byte[] bytes = new byte[DATA_LENGTH];
int len = 0;
while (-1 != (len = is.read(bytes))) {
//輸出
String info = new String(bytes, 0, len);
sb.append(info);
//System.out.println(info);
}
} catch (java.io.FileNotFoundException e) {
System.out.println("檔案沒有找到");
e.printStackTrace();
} catch (java.io.IOException e) {
System.out.println("檔案讀取異常");
e.printStackTrace();
} finally {
if (null != is) {
try {
is.close();
} catch (IOException e) {
System.out.println("檔案關閉異常");
e.printStackTrace();
} finally {
return sb.toString();
}
}
}
return null;
}
/**
* 在指定位置的檔案處寫入指定的內容
*
* @param destFilePath 目標檔案地址
* @param content 要寫入的內容,不可以超過DATA_LENGTH
* @return true=寫入成功,false=寫入失敗
*/
public boolean writeFile(String destFilePath, String content) {
//1.建立file物件
File dest = new File(destFilePath);
return writeFile(dest, content);
}
/**
* 在指定的檔案處寫入指定的內容
*
* @param dest 目標檔案
* @param content 寫入的內容,不可以超過DATA_LENGTH
* @return true=寫入成功,false=寫入失敗
*/
public boolean writeFile(File dest, String content) {
//1.建立file物件
if (dest.isDirectory()) {
//如果目標檔案已經存在且是一個資料夾,是不可以建立的
System.out.println("拷貝失敗!");
System.out.println("目標無法覆蓋");
return false;
}
//2.選擇檔案輸出流
OutputStream os = null;
try {
os = new BufferedOutputStream(new FileOutputStream(dest, true));
//3. 操作
os.write(content.getBytes(), 0, content.getBytes().length);
//強制把緩衝區刷出
os.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("檔案未找到");
} catch (IOException e) {
e.printStackTrace();
System.out.println("檔案寫出失敗");
} finally {
//釋放資源
try {
os.close();
return true;
} catch (IOException e) {
e.printStackTrace();
System.out.println("檔案關閉失敗");
}
}
return false;
}
/**
* 拷貝檔案
*
* @param srcFilePath 原始檔地址
* @param destFilePath 目標檔案地址
* @return true=拷貝成功,false=拷貝失敗
*/
public boolean copyFile(String srcFilePath, String destFilePath) {
//1. 建立源和目的地,確保源存在且為檔案
File src = new File(srcFilePath);
File dest = new File(destFilePath);
return copyFile(src, dest);
}
/**
* 拷貝資料夾
*
* @param src 原始檔
* @param dest 目標檔案
* @return true=拷貝成功,false=拷貝失敗
*/
public boolean copyFile(File src, File dest) {
//1. 建立源和目的地,確保源存在且為檔案
if (!src.isFile()) {
System.out.println("拷貝失敗!");
System.out.println("源只能是檔案");
return false;
}
if (dest.isDirectory()) {
//如果目標檔案已經存在且是一個資料夾,是不可以建立的
System.out.println("拷貝失敗!");
System.out.println("目標無法覆蓋");
return false;
}
//2.選擇流
InputStream is = null;
OutputStream os = null;
try {
is = new BufferedInputStream(new FileInputStream(src));
os = new BufferedOutputStream(new FileOutputStream(dest));
//3.不斷讀取+寫出 完成拷貝
byte[] data = new byte[DATA_LENGTH];
int len = 0;
while (-1 != (len = is.read(data))) {
os.write(data, 0, len);
}
os.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//4.先開啟後關閉
try {
os.close();
is.close();
return true;
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
}
/**
* 拷貝資料夾
*
* @param srcFolderPath 原始檔夾地址
* @param destFolderPath 目的資料夾地址
* @throws IOException
*/
public void copyFolder(String srcFolderPath, String destFolderPath) {
//第一步,先把最外面的那個資料夾拷貝過去(其實是建立一個新的)
File src = new File(srcFolderPath);
File dest = null;
if (src.isDirectory()) {
dest = new File(destFolderPath, src.getName());
}
//第二步,把該資料夾內的內容拷貝過去
copyDir(src, dest);
}
/**
* 拷貝資料夾
*
* @param src 原始檔夾物件
* @param dest 目的資料夾物件
*/
public void copyFolder(File src, File dest) {
if (src.isDirectory()) {
dest = new File(dest, src.getName());
}
copyDir(src, dest);
}
/**
* 遞迴拷貝資料夾中的內容
*
* @param src 原始檔物件
* @param dest 目標資料夾物件
*/
public void copyDir(File src, File dest) {
if (src.isFile()) {
copyFile(src, dest);
} else if (src.isDirectory()) {
//確保目標資料夾存在
dest.mkdirs();
for (File sub : src.listFiles()) {
copyDir(sub, new File(dest, sub.getName()));
}
}
}
/**
* 字元的讀取,只能用於純文字,注意字符集
*
* @param srcFilePath 原始檔地址
* @return 檔案的內容
*/
public String readFileByReader(String srcFilePath) {
StringBuilder sb = new StringBuilder();
//建立源
File src = new File(srcFilePath);
Reader reader = null;
try {
reader = new FileReader(src);
char[] data = new char[DATA_LENGTH];
int len = 0;
while (-1 != (len = reader.read(data))) {
//char轉String
String info = new String(data, 0, len);
sb.append(info);
}
} catch (FileNotFoundException e) {
System.out.println("檔案未找到");
e.printStackTrace();
} catch (IOException e) {
System.out.println("檔案讀取異常");
e.printStackTrace();
} finally {
try {
reader.close();
return sb.toString();
} catch (IOException e) {
System.out.println("檔案關閉異常");
e.printStackTrace();
}
}
return null;
}
/**
* 利用buffer來提高效率,仍然只能用於純文字
*
* @param srcFilePath 原始檔地址
* @return 檔案的內容
*/
public String readFileByBufferedReader(String srcFilePath) {
StringBuilder sb = new StringBuilder();
//建立源
File src = new File(srcFilePath);
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(src));
String line = null;
while (null != (line = reader.readLine())) {
sb.append(line);
}
} catch (FileNotFoundException e) {
System.out.println("檔案未找到");
e.printStackTrace();
} catch (IOException e) {
System.out.println("檔案寫出異常");
e.printStackTrace();
} finally {
try {
reader.close();
return sb.toString();
} catch (IOException e) {
System.out.println("檔案關閉異常");
e.printStackTrace();
}
}
return null;
}
/**
* 向指定的檔案中寫入內容
*
* @param destFilePath 目標檔案地址
* @param content 要寫入的內容
*/
public void writeFileByWriter(String destFilePath, String content) {
File dest = new File(destFilePath);
Writer writer = null;
try {
writer = new FileWriter(dest);
writer.write(content);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
writer.close();
} catch (IOException e) {
System.out.println("檔案關閉異常");
e.printStackTrace();
}
}
}
/**
* 向指定的檔案中寫入內容
*
* @param destFilePath 目標檔案地址
* @param content 要寫入的內容
*/
public void writeFileByBufferedWriter(String destFilePath, String content) {
File dest = new File(destFilePath);
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new FileWriter(dest));
writer.write(content);
writer.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
writer.close();
} catch (IOException e) {
System.out.println("檔案關閉異常");
e.printStackTrace();
}
}
}
/**
* 拷貝純文字的檔案
*
* @param srcFilePath 原始檔的地址
* @param destFilePath 目標檔案的地址
* @return true = 成功,false = 失敗
*/
public boolean copyPlainTextFile(String srcFilePath, String destFilePath) {
File src = new File(srcFilePath);
File dest = new File(destFilePath);
if (!src.isFile()) {
System.out.println("拷貝失敗!");
System.out.println("源只能是檔案");
return false;
}
if (dest.isDirectory()) {
//如果目標檔案已經存在且是一個資料夾,是不可以建立的
System.out.println("拷貝失敗!");
System.out.println("目標無法覆蓋");
return false;
}
BufferedReader reader = null;
BufferedWriter writer = null;
try {
reader = new BufferedReader(new FileReader(src));
writer = new BufferedWriter(new FileWriter(dest));
String line = null;
while (null != (line = reader.readLine())) {
writer.write(line);
writer.newLine(); //等價於writer.write("\r\n");
}
writer.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
writer.close();
reader.close();
return true;
} catch (IOException e) {
System.out.println("檔案關閉異常");
e.printStackTrace();
}
}
return false;
}
}
日後有空再來補全每個函式的詳解。
相關文章
- JAVA ZIP 處理檔案Java
- java 檔案處理 工具類Java
- 使用Java處理大檔案Java
- java中 檔案壓縮處理Java
- Java 多執行緒處理任務的封裝Java執行緒封裝
- 如何把JAVA程式封裝成EXE檔案Java封裝
- 【封裝小技巧】列表處理函式的封裝封裝函式
- java讀取大檔案並處理Java
- 【封裝小技巧】數字處理函式的封裝封裝函式
- 專案常用JS方法封裝(三) [ 字串相關處理 ]JS封裝字串
- 專案常用JS方法封裝(四) [ 陣列相關處理 ]JS封裝陣列
- 專案常用JS方法封裝(二) [ 時間相關處理 ]JS封裝
- [R]檔案處理
- bat處理檔案BAT
- bat檔案處理BAT
- Linux學習之檔案處理命令(二)目錄處理命令 && 檔案處理命令Linux
- axios封裝以及前端介面處理策略iOS封裝前端
- window 批處理檔案
- python處理檔案Python
- Go xml檔案處理GoXML
- python檔案處理Python
- python 檔案處理Python
- Python 檔案處理Python
- 批處理檔案命令
- 檔案處理函式函式
- Windows批處理檔案Windows
- bat批處理檔案BAT
- 用批處理檔案編譯並執行java編譯Java
- 有手就會的 Java 處理壓縮檔案Java
- Java使用javacv處理影片檔案過程記錄Java
- 封裝springmvc處理ajax請求結果封裝SpringMVC
- java封裝Java封裝
- java 封裝Java封裝
- python處理txt檔案Python
- laravel處理檔案上傳Laravel
- Python 批量處理檔案Python
- node js 處理PDF檔案JS
- Python處理大檔案Python