Android 關於文件及文件夾的創建 、刪除、重命名、復制拷貝


package com.example.administrator.myapplication.util;

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.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

/**
* Created by Administrator on 2019/5/17 0017.
*/

public class FileUtils {

private static final String TAG = "FileUtils";

/**
* 創建文件
*
* @param filePath 文件地址
* @param fileName 文件名
* @return
*/
public static boolean createFile(String filePath, String fileName) {

String strFilePath = filePath + fileName;

File file = new File(filePath);
if (!file.exists()) {
/** 注意這里是 mkdirs()方法 可以創建多個文件夾 */
file.mkdirs();
}

File subfile = new File(strFilePath);

if (!subfile.exists()) {
try {
boolean b = subfile.createNewFile();
return b;
} catch (IOException e) {
e.printStackTrace();
}
} else {
return true;
}
return false;
}

/**
* 遍歷文件夾下的文件
*
* @param file 地址
*/
public static List<File> getFile(File file) {
List<File> list = new ArrayList<>();
File[] fileArray = file.listFiles();
if (fileArray == null) {
return null;
} else {
for (File f : fileArray) {
if (f.isFile()) {
list.add(0, f);
} else {
getFile(f);
}
}
}
return list;
}

/**
* 刪除文件
*
* @param filePath 文件地址
* @return
*/
public static boolean deleteFiles(String filePath) {
List<File> files = getFile(new File(filePath));
if (files.size() != 0) {
for (int i = 0; i < files.size(); i++) {
File file = files.get(i);

/** 如果是文件則刪除 如果都刪除可不必判斷 */
if (file.isFile()) {
file.delete();
}

}
}
return true;
}


/**
* 向文件中添加內容
*
* @param strcontent 內容
* @param filePath 地址
* @param fileName 文件名
*/
public static void writeToFile(String strcontent, String filePath, String fileName) {
//生成文件夾之后,再生成文件,不然會出錯
String strFilePath = filePath + fileName;
// 每次寫入時,都換行寫

File subfile = new File(strFilePath);


RandomAccessFile raf = null;
try {
/** 構造函數 第二個是讀寫方式 */
raf = new RandomAccessFile(subfile, "rw");
/** 將記錄指針移動到該文件的最后 */
raf.seek(subfile.length());
/** 向文件末尾追加內容 */
raf.write(strcontent.getBytes());

raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}


/**
* 修改文件內容(覆蓋或者添加)
*
* @param path 文件地址
* @param content 覆蓋內容
* @param append 指定了寫入的方式,是覆蓋寫還是追加寫(true=追加)(false=覆蓋)
*/
public static void modifyFile(String path, String content, boolean append) {
try {
FileWriter fileWriter = new FileWriter(path, append);
BufferedWriter writer = new BufferedWriter(fileWriter);
writer.append(content);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 讀取文件內容
*
* @param filePath 地址
* @param filename 名稱
* @return 返回內容
*/
public static String getString(String filePath, String filename) {
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(new File(filePath + filename));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
InputStreamReader inputStreamReader = null;
try {
inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
BufferedReader reader = new BufferedReader(inputStreamReader);
StringBuffer sb = new StringBuffer("");
String line;
try {
while ((line = reader.readLine()) != null) {
sb.append(line);
sb.append("\n");
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}

/**
* 重命名文件
*
* @param oldPath 原來的文件地址
* @param newPath 新的文件地址
*/
public static void renameFile(String oldPath, String newPath) {
File oleFile = new File(oldPath);
File newFile = new File(newPath);
//執行重命名
oleFile.renameTo(newFile);
}


/**
* 復制文件
*
* @param fromFile 要復制的文件目錄
* @param toFile 要粘貼的文件目錄
* @return 是否復制成功
*/
public static boolean copy(String fromFile, String toFile) {
//要復制的文件目錄
File[] currentFiles;
File root = new File(fromFile);
//如同判斷SD卡是否存在或者文件是否存在
//如果不存在則 return出去
if (!root.exists()) {
return false;
}
//如果存在則獲取當前目錄下的全部文件 填充數組
currentFiles = root.listFiles();

//目標目錄
File targetDir = new File(toFile);
//創建目錄
if (!targetDir.exists()) {
targetDir.mkdirs();
}
//遍歷要復制該目錄下的全部文件
for (int i = 0; i < currentFiles.length; i++) {
if (currentFiles[i].isDirectory())//如果當前項為子目錄 進行遞歸
{
copy(currentFiles[i].getPath() + "/", toFile + currentFiles[i].getName() + "/");

} else//如果當前項為文件則進行文件拷貝
{
CopySdcardFile(currentFiles[i].getPath(), toFile + currentFiles[i].getName());
}
}
return true;
}


//文件拷貝
//要復制的目錄下的所有非子目錄(文件夾)文件拷貝
public static boolean CopySdcardFile(String fromFile, String toFile) {

try {
InputStream fosfrom = new FileInputStream(fromFile);
OutputStream fosto = new FileOutputStream(toFile);
byte bt[] = new byte[1024];
int c;
while ((c = fosfrom.read(bt)) > 0) {
fosto.write(bt, 0, c);
}
fosfrom.close();
fosto.close();
return true;

} catch (Exception ex) {
return false;
}
}

}


--------------------- 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM