標籤:android style blog color io os java ar 檔案
FileManager
package com.kale.utils;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintStream;import android.content.Context;import android.os.Environment;/** * @author:Jack Tony * @tips : * <!-- 讀寫SD卡的許可權 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> * @date :2014-6-30 */public class FileManager { private String SD_PATH; private String fileName; private String dirName; public String getSD_PATH() { return SD_PATH; } /** * @param permission 是否添加了許可權 */ public FileManager(boolean permission) { //得到當前外部存放裝置的目錄 SD_PATH = Environment.getExternalStorageDirectory() + "/"; } /** * 在SD卡上建立檔案 * * @throws IOException */ public File creatSDFile(String dirName ,String fileName) throws IOException { this.fileName = fileName; this.dirName = dirName; File file = new File(creatSDDir(dirName), fileName); return file; } public String getFileWholePath() throws IOException{ if (dirName == null || fileName == null) { return SD_PATH + dirName + "/" + fileName; } else { throw new IOException("can‘t find dirName or fileName"); } } /** * 在SD卡上建立目錄 * * @param dirName */ public File creatSDDir(String dirName) { File dir = new File(SD_PATH + dirName); dir.mkdir(); return dir; } /** * 判斷SD卡上的檔案夾是否存在 * kale,file.txt->kale/file.txt */ public boolean isFileExist(String dirName ,String fileName){ File file = new File(SD_PATH +dirName+"/"+ fileName); return file.exists(); } /** * 將一個InputStream裡面的資料寫入到SD卡中 * example:kale,file.txt,inputStream->kale/file.txt * InputStream is = new ByteArrayInputStream( "kale data".getBytes() ); manager.saveToSdCard("dir02", "kale.txt", is ); */ public File saveToSDcard(String dirName,String fileName,InputStream input){ File file = null; OutputStream output = null; try{ //建立目錄 creatSDDir(dirName); //建立檔案 file = creatSDFile(dirName ,fileName); output = new FileOutputStream(file); byte buffer [] = new byte[5 * 1024]; //int count = 0; while((input.read(buffer)) != -1){ //String str = new String(buffer,0,count); //str = new String(str.getBytes("iso-8859-1"),"utf-8"); /*System.out.println("---------File Manager----start--------"); System.out.println(str); System.out.println("---------File Manager-----end-------");*/ output.write(buffer); } output.flush(); } catch(Exception e){ e.printStackTrace(); } finally{ try{ output.close(); } catch(Exception e){ e.printStackTrace(); } } return file; } /** * @param dirName * @param fileName * @return 從sd卡中讀取檔案的字元,返回String * @throws Exception */ public String readFromSDcard(String dirName,String fileName) throws FileNotFoundException { try { File file = new File(SD_PATH +dirName+"/"+ fileName); FileInputStream fis = new FileInputStream(file); BufferedReader br = new BufferedReader(new InputStreamReader(fis)); StringBuilder sb = new StringBuilder(""); String line = null; //迴圈讀取檔案內容 while((line = br.readLine()) != null) { sb.append(line); } br.close(); return sb.toString().trim(); } catch(FileNotFoundException e) { e.printStackTrace(); throw new FileNotFoundException("no such file"); } catch (Exception e) { e.printStackTrace(); } return null; } /////////////////////// 直接讀取包名檔案夾下的檔案,而不是SD卡中的 ///////////////////// /** * @param str * 將string寫入到data/data/包名/files中 * example:write(file.txt ,data) */ public static void write(Context mContext,String fileName,String str) { try { /** * MODE_PRIVATE:該檔案只能被當前程式讀寫 MODE_APPEND:用追加方式開啟檔案,新寫入的內容追加到末尾 * MODE_WORLD_READABLE:該檔案內容可以被其他程式讀 * MODE_WORLD_WRITEABLE:該檔案內容可以被其他程式讀寫 */ FileOutputStream fos = mContext.openFileOutput(fileName, Context.MODE_PRIVATE | Context.MODE_APPEND); PrintStream ps = new PrintStream(fos); // 輸出檔案的內容 ps.println(str); ps.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 通過檔案名稱來讀取data/data/包名/files下的檔案 * example:read("file.txt") * @return * 返回null,表示找不到檔案,或出現異常 */ public static String read(Context mContext,String fileName) { try { // 開啟檔案輸入資料流 FileInputStream fis = mContext.openFileInput(fileName); byte[] buff = new byte[1024]; int hasRead = 0; StringBuilder sb = new StringBuilder(""); // 讀取檔案內容 while ((hasRead = fis.read(buff)) > 0) { sb.append(new String(buff, 0, hasRead)); } // 關閉檔案輸入資料流 fis.close(); return sb.toString(); } catch(FileNotFoundException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return null; }}
用IO流向儲存空間或SD卡中存入/讀取字元的工具類