文件读写&访问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);
}
}
posted @ 2011-05-20 01:22  飞鹰小谭  阅读(1333)  评论(0编辑  收藏  举报