下文转自;
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);
}
}
本文详细介绍了在Android中如何进行文件操作,包括不同模式下的文件读写、SD卡访问权限设置及路径获取等关键技术点。
1252

被折叠的 条评论
为什么被折叠?



