重點是 out = openFileOutput(filename, Context.MODE_WORLD_READABLE);
這個是權限的意思...
Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
1. Context.MODE_PRIVATE:為預設操作模式,代表該檔是私有資料,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原檔的內容,
2. Context.MODE_APPEND:模式會檢查檔是否存在,存在就往檔追加內容,否則就創建新檔。
3. Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應用是否有許可權讀寫該檔。
MODE_WORLD_READABLE:表示當前檔可以被其他應用讀取;MODE_WORLD_WRITEABLE:表示當前檔可以被其他應用寫入。
如果希望檔被其他應用讀和寫,可以傳入:
openFileOutput("itcast.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
android有一套自己的安全模型,當應用程式(.apk)在安裝時系統就會分配給他一個userid,當該應用要去訪問其他資源比如檔的時候,就需要userid匹配。預設情況下,任何應用創建的檔,sharedpreferences,資料庫都應該是私有的(位於/data/data/<package name>/files),其他程式無法訪問。除非在創建時指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有這樣其他程式才能正確訪問。
public void savebmp(Bitmap bmp){ | |
String filename = "out.bmp"; | |
FileOutputStream out = null; | |
try { | |
out = openFileOutput(filename, Context.MODE_WORLD_READABLE); | |
//out = new FileOutputStream("out.bmp"); | |
bmp.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance | |
// PNG is a lossless format, the compression factor (100) is ignored | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} finally { | |
try { | |
if (out != null) { | |
out.close(); | |
} | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
} | |
} |
Bitmap bmp = readbmp("/data/data/com.ford.openxc.webcam/files/out.bmp");
public Bitmap readbmp(String filename){
Bitmap bitmap = BitmapFactory.decodeFile(filename);
return bitmap;
}
讀取檔內容
public void load()
{
try {
FileInputStream inStream=this.openFileInput("a.txt");
ByteArrayOutputStream stream=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int length=-1;
while((length=inStream.read(buffer))!=-1) {
stream.write(buffer,0,length);
}
stream.close();
inStream.close();
text.setText(stream.toString());
Toast.makeText(MyActivity.this,"Loaded",Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e){
return ;
}
}
|
把檔放入SD卡
使用Activity的openFileOutput()方法保存檔,檔是存放在手機空間上,一般手機的存儲空間不是很大,存放些小檔還行,如果要存放像視頻這樣的大檔,是不可行的。對於像視頻這樣的大檔,我們可以把它存放在SDCard。 SDCard是幹什麼的?你可以把它看作是移動硬碟或U盤。
在模擬器中使用SDCard,你需要先創建一張SDCard卡(當然不是真的SDCard,只是鏡像檔)。創建SDCard可以在Eclipse創建模擬器時隨同創建,也可以使用DOS命令進行創建,如下:
在Dos視窗中進入android SDK安裝路徑的tools目錄,輸入以下命令創建一張容量為2G的SDCard,檔尾碼可以隨便取,建議使用.img:
mksdcard 2048M D:\AndroidTool\sdcard.img
在程式中訪問SDCard,你需要申請訪問SDCard的許可權。
在AndroidManifest.xml中加入訪問SDCard的許可權如下:
<!-- 在SDCard中創建與刪除檔許可權 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard寫入資料許可權 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
要往SDCard存放檔,程式必須先判斷手機是否裝有SDCard,並且可以進行讀寫。
注意:訪問SDCard必須在AndroidManifest.xml中加入訪問SDCard的許可權
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File sdCardDir = Environment.getExternalStorageDirectory();//獲取SDCard目錄
File saveFile = new File(sdCardDir, “a.txt”);
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("test".getBytes());
outStream.close();
}
Environment.getExternalStorageState()方法用於獲取SDCard的狀態,如果手機裝有SDCard,並且可以進行讀寫,那麼方法返回的狀態等於Environment.MEDIA_MOUNTED。
Environment.getExternalStorageDirectory()方法用於獲取SDCard的目錄,當然要獲取SDCard的目錄,你也可以這樣寫:
File sdCardDir = new File("/sdcard"); //獲取SDCard目錄
File saveFile = new File(sdCardDir, "itcast.txt");
//上面兩句代碼可以合成一句: File saveFile = new File("/sdcard/a.txt");
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("test".getBytes());
outStream.close();
ref : http://fecbob.pixnet.net/blog/post/35618216-android%E8%B3%87%E6%96%99%E5%84%B2%E5%AD%98-%E3%80%90%E8%BD%89%E3%80%91-
沒有留言:
張貼留言