1、數據寫入本地文件
/**
* 將數據保存到文件夾
*
* @param mData
*/
public static void saveDataFile(Context context,String mData) {
// 首先保存圖片
String externalStorageState = Environment.getExternalStorageState();
//判斷sd卡是否掛載
if (externalStorageState.equals(Environment.MEDIA_MOUNTED)) {
/*外部存儲可用,則保存到外部存儲*/
//創建一個文件夾
File appDir = new File(Environment.getExternalStorageDirectory(), "Movies");
//如果文件夾不存在
if (!appDir.exists()) {
//則創建這個文件夾
appDir.mkdir();
}
//將bitmap保存
save(mData, appDir);
} else {
//外部不可用,將圖片保存到內部存儲中,獲取內部存儲文件目錄
File filesDir = context.getFilesDir();
//保存
save(mData, filesDir);
}
}
private static void save(String mData, File appDir) {
//命名文件名稱
String fileName = "setDat" + ".text";
//創建圖片文件,傳入文件夾和文件名
File filePath = new File(appDir, fileName);
try {
//創建文件輸出流,傳入圖片文件,用於輸入bitmap
// FileOutputStream fos = new FileOutputStream(filePath); //基礎上覆蓋
FileOutputStream outputStream = new FileOutputStream(filePath,true); // 參數爲true表示在原有的字符上追加字符串
// 寫數據
if (!mData.isEmpty()){
outputStream.write(("" + mData).getBytes());
outputStream.write("\r\n".getBytes());// 換行
}
//刷新
outputStream.flush();
//關閉流
outputStream.close();
Log.d("HttpUtil","打印數據保存成功:"+mData);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
2、逐行讀取
/**
* 讀取文件
*
* @return
* @param appDir 文件路徑
*/
public List<String> readFile(File appDir) {
String mReadData="";
//命名文件名稱
String fileName = "setDat" + ".text";
//創建圖片文件,傳入文件夾和文件名
File file = new File(appDir, fileName);
List<String> arrayList = new ArrayList<>();
if (file.isDirectory()) {
Log.d("file", "The File doesn't not exist.");
} else {
try {
InputStream instream = new FileInputStream(file);
if (instream != null) {
//Log.d(Tag,"逐行數據: "+line);
InputStreamReader inputreader = new InputStreamReader(instream);
BufferedReader buffreader = new BufferedReader(inputreader);
String line;
// 逐行讀取
while ((line = buffreader.readLine()) != null) {
StringBuilder builder = new StringBuilder(line);
arrayList.add(builder.toString());
}
// mReadData = "";
for (int i = 0; i < arrayList.size(); i++) {
mReadData += arrayList.get(i) + "\n";
}
Log.d("fileutil","Read the data: "+mReadData);
instream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return arrayList;
}
2.2、通過寫入空字符串,清空文件數據
/**
* @param mData 空串
* 通過寫入空字符串,達到清楚文件內數據
*/
private void cleanData(File appDir,String mData) {
//文件名稱
String fileName = "setDat" + ".text";
//創建圖片文件,傳入文件夾和文件名
File filePath = new File(appDir, fileName);
try {
//基礎上覆蓋
FileOutputStream outputStream = new FileOutputStream(filePath);
// 寫數據
if (!mData.isEmpty()){
outputStream.write(("" + mData).getBytes());
}
//沖刷流
outputStream.flush();
//關閉流
outputStream.close();
Log.d("fileUtil","打印-操作數據已清空:"+mData);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
3、圖片存儲,並通知相冊加載
/**
* 將二維碼圖片保存到文件夾
*
* @param context
* @param bmp
*/
public static void saveImageToLocal(Context context, Bitmap bmp) {
// 首先保存圖片
String externalStorageState = Environment.getExternalStorageState();
//判斷sd卡是否掛載
if (externalStorageState.equals(Environment.MEDIA_MOUNTED)) {
/*外部存儲可用,則保存到外部存儲*/
//創建一個文件夾
File appDir = new File(Environment.getExternalStorageDirectory(), "Pictures");
//如果文件夾不存在
if (!appDir.exists()) {
//則創建這個文件夾
appDir.mkdir();
}
//將bitmap保存
save(context, bmp, appDir);
} else {
//外部不可用,將圖片保存到內部存儲中,獲取內部存儲文件目錄
File filesDir = context.getFilesDir();
//保存
save(context, bmp, filesDir);
}
}
private static void save(Context context, Bitmap bmp, File appDir) {
//命名文件名稱
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");// HH:mm:ss
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(System.currentTimeMillis());
String format = dateFormat.format(date);
String fileName = format + ".jpg";
// String fileName = "掃碼知內容" + ".jpg";
//創建圖片文件,傳入文件夾和文件名
File imagePath = new File(appDir, fileName);
try {
//創建文件輸出流,傳入圖片文件,用於輸入bitmap
FileOutputStream fos = new FileOutputStream(imagePath);
//將bitmap壓縮成png,並保存到相應的文件夾中
bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
//沖刷流
fos.flush();
//關閉流
fos.close();
Toast.makeText(context,"保存完畢",Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 其次把文件插入到系統圖庫
try {
MediaStore.Images.Media.insertImage(context.getContentResolver(),
imagePath.getAbsolutePath(), fileName, null);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 最後通知圖庫更新
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + imagePath.getAbsolutePath())));
}
4、將源文件移動至另一文件下,並刪除源文件 :
-
/* * 剪切文件 選擇的文件路徑 * inputPath 源文件路徑 絕對路徑 D:\test.text * outPath 目標文件路徑 * */ public static void ChooseFileCut(String inputPath, String outPath) { File inputFile = new File(inputPath); File outFile = new File(outPath); // 在程序結束時刪除文件1 // inputFile.deleteOnExit(); try { // 在D盤創建文件2 outFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } cutFile(inputFile, outFile); }
-
// 剪切文件 將文件1剪切入文件2中並刪除源文件 public static void cutFile(File inputFile, File outFile) { FileOutputStream mFileOutputStream = null; InputStream mInputStream = null; byte[] bytes = new byte[1024]; int temp = 0; try { mInputStream = new FileInputStream(inputFile); mFileOutputStream = new FileOutputStream(outFile); while ((temp = mInputStream.read(bytes)) != -1) { mFileOutputStream.write(bytes, 0, temp); mFileOutputStream.flush(); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (mInputStream != null) { mInputStream.close(); } if (mFileOutputStream != null) { mFileOutputStream.close(); } } catch (Exception e2) { // TODO: handle exception } } System.out.println("文件移動成功。。。"); inputFile.delete(); //刪除 }
- 結束;