文件读写&访问sdcard&文件操作模式

下文转自;

http://www.cnblogs.com/tjpfly/archive/2011/05/20/android_sdcard_file_save_read.html

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

文件读写&访问sdcard&文件操作模式

文件操作模式

MODE_APPEND 只能被创建的应用使用 ,如果有就追加,没有就创建
MODE_PRIVATE 只能被创建应用使用,写入文件的时候会覆盖
MODE_WORLD_READABLE 其他应用程序可以读取
MODE_WORLD_WRITEABLE 其他应用程序可以写 覆盖原有程序
需要什么模式就让这些操作模式相加

访问sdcard

1、在程序中要访问sd卡就要申请sd卡的访问权限
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

2、sd卡路径
  2.2前 /sdcard
  2.2后 /mnt/sdcard 最好获得路径方法:Environment.getExternalStorageDirectory()

3、将文件写入sdcard的时候要判断用户时候插入sdcard并且可以读写

  Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

文件读写

1、当用上下文保存的时候

   路径在 data/data/包名/files下面

   另外访问方式:/data/data/包/files/文件名 e:/data/data/com.tjp/files/tjpable
2、查看是在 file exploer
3、导出文件

4、当使用上下文保存的时候

FileOutputStream outputStream= context.openFileOutput(fileName, Context.MODE_PRIVATE);//保存
FileInputStream inputStream=context.openFileInput(fileName);//读取

5、在activity中获得路径

File file= this.getFilesDir();//快速得到文件夹
this.getCacheDir();//获得缓存文件夹

demo文件

AndroidManifest.xml
 
   
<? xml version="1.0" encoding="utf-8" ?>
< manifest xmlns:android ="http://schemas.android.com/apk/res/android"
package
="com.tjp"
android:versionCode
="1"
android:versionName
="1.0" >
< uses-sdk android:minSdkVersion ="7" />

< application android:icon ="@drawable/icon" android:label ="@string/app_name" >
< uses-library android:name ="android.test.runner" />  
< activity android:name =".FileActivity"
android:label
="@string/app_name" >
< intent-filter >
< action android:name ="android.intent.action.MAIN" />
< category android:name ="android.intent.category.LAUNCHER" />
</ intent-filter >
</ activity >

</ application >
< instrumentation android:name ="android.test.InstrumentationTestRunner"
android:targetPackage
="com.tjp" android:label ="test my activity" />
<!-- 在SDCard中创建与删除文件权限 -->
< uses-permission android:name ="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 往SDCard写入数据权限 -->
< uses-permission android:name ="android.permission.WRITE_EXTERNAL_STORAGE" />
</ manifest >
main.xml
 
   
<? xml version="1.0" encoding="utf-8" ?>
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
android:orientation
="vertical"
android:layout_width
="fill_parent"
android:layout_height
="fill_parent"
>
< TextView
android:layout_width ="fill_parent"
android:layout_height
="wrap_content"
android:text
="@string/fileName"
/>
< EditText
android:layout_width ="fill_parent"
android:layout_height
="wrap_content"
android:id
="@+id/fileName"
/>
< TextView
android:layout_width ="fill_parent"
android:layout_height
="wrap_content"
android:text
="@string/content"
/>
< EditText
android:layout_width ="fill_parent"
android:layout_height
="wrap_content"
android:minLines
="3"
android:id
="@+id/content"
/>
< Button
android:layout_width ="wrap_content"
android:layout_height
="wrap_content"
android:text
="@string/save"
android:id
="@+id/btnsave"
/>
</ LinearLayout >
strings.xml
 
   
<? xml version="1.0" encoding="utf-8" ?>
< resources >
< string name ="hello" > Hello World, FileActivity! </ string >
< string name ="app_name" > 文件读取 </ string >
< string name ="fileName" > 文件名称 </ string >
< string name ="content" > 文件内容 </ string >
< string name ="save" > 保存 </ string >
< string name ="success" > 文件保存成功 </ string >
< string name ="error" > 文件保存失败 </ string >
< string name ="sdcarderror" > sdCard不存在或写保护 </ string >
</ resources >
FileActivity
 
   
package com.tjp;

import java.io.File;

import com.tjp.service.FileService;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class FileActivity extends Activity {
/** Called when the activity is first created. */
private static final String TAG = " FileActivity " ;
private FileService fileService;
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button
= (Button)findViewById(R.id.btnsave);
fileService
= new FileService( this );
File file
= this .getFilesDir(); // 快速得到文件夹
this .getCacheDir(); // 获得缓存文件夹
button.setOnClickListener( new View.OnClickListener(){

@Override
public void onClick(View v) {
EditText fileNameText
= (EditText)findViewById(R.id.fileName);
EditText contenText
= (EditText)findViewById(R.id.content);
String fileName
= fileNameText.getText().toString();
String content
= contenText.getText().toString();
try {
// 判断sd卡是否存在手机上并且可以进行读写
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
fileService.save2sdCard(fileName, content);
Toast.makeText(FileActivity.
this , R.string.success, Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(FileActivity.
this , R.string.sdcarderror, Toast.LENGTH_SHORT).show();
}

}
catch (Exception e) {
Log.e(TAG, e.toString());
Toast.makeText(FileActivity.
this , R.string.error, Toast.LENGTH_SHORT).show();
}
}

});
}
}



FileService
 
   
package com.tjp.service;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import android.content.Context;
import android.os.Environment;

public class FileService {

private Context context;

public FileService(Context context) {
this .context = context;
}

/**
* 保存内容到sd卡中(以私有文件形式保存)
*
@param filename 文件名称
*
@param content 文件内容
*
@throws Exception
*/
public void save2sdCard(String fileName,String content) throws Exception{
File file
= new File(Environment.getExternalStorageDirectory(),fileName);
FileOutputStream outputStream
= new FileOutputStream(file);
outputStream.write(content.getBytes());
outputStream.close();
}

/**
* 保存内容(以私有文件形式保存)
*
@param filename 文件名称
*
@param content 文件内容
*
@throws Exception
*/
public void save(String fileName,String content) throws Exception{
FileOutputStream outputStream
= context.openFileOutput(fileName, Context.MODE_PRIVATE);
outputStream.write(content.getBytes());
outputStream.close();
}

/**
* 保存内容(以私有文件形式保存+追加)
*
@param filename 文件名称
*
@param content 文件内容
*
@throws Exception
*/
public void saveAppend(String fileName,String content) throws Exception{ // ctrl+shift+y 变小写 ctrl+shift+x 变大写
FileOutputStream outputStream = context.openFileOutput(fileName, Context.MODE_APPEND);
outputStream.write(content.getBytes());
outputStream.close();
}

/**
* 保存内容(允许其他应用读取)
*
@param filename 文件名称
*
@param content 文件内容
*
@throws Exception
*/
public void saveReadAble(String fileName,String content) throws Exception{
FileOutputStream outputStream
= context.openFileOutput(fileName, Context.MODE_WORLD_READABLE);
outputStream.write(content.getBytes());
outputStream.close();
}

/**
* 文件读取
*
@param fileName
*
@return
*
@throws Exception
*/
public String read(String fileName) throws Exception{
FileInputStream inputStream
= context.openFileInput(fileName);
byte [] buffer = new byte [ 1024 ];
ByteArrayOutputStream byteArrayOutputStream
= new ByteArrayOutputStream();
int len =- 1 ;
while ((len = inputStream.read(buffer)) !=- 1 ){ // 读取文件到缓冲区
byteArrayOutputStream.write(buffer, 0 , len); // 写入到内存
}
byte [] data = byteArrayOutputStream.toByteArray(); // 将内存中的二进制数据转为数组
byteArrayOutputStream.close();
inputStream.close();
return new String(data);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值