android文件读写&访问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,exception,String,File,layout,encoding)