4.6.1.1 使用私有文件
这种情况下使用的文件,只能在同一个应用中读取/写入,并且这是使用文件的一种非常安全的方式。 原则上,无论存储在文件中的信息是否是公开的,尽可能使用私有文件,当与其他应用交换必要的信息时,应该使用另一个 Android 系统(内容供应器,服务)来完成。
要点:
文件必须在应用目录中创建。
文件的访问权限必须设置为私有模式,以免其他应用使用。
可以存储敏感信息。
对于存储在文件中的信息,请仔细和安全地处理文件数据。
PrivateFileActivity.java
package org.jssec.android.file.privatefile;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.TextView;public class PrivateFileActivity extends Activity {private TextView mFileView;private static final String FILE_NAME = "private_file.dat";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.file);mFileView = (TextView) findViewById(R.id.file_view);}/*** Create file process** @param view*/public void onCreateFileClick(View view) {FileOutputStream fos = null;try {// *** POINT 1 *** Files must be created in application directory.// *** POINT 2 *** The access privilege of file must be set private mode in order not to be used by other applications.fos = openFileOutput(FILE_NAME, MODE_PRIVATE);// *** POINT 3 *** Sensitive information can be stored.// *** POINT 4 *** Regarding the information to be stored in files, handle file data carefully and securely.// Omitted, since this is a sample. Please refer to "3.2 Handling Input Data Carefully and Securely."fos.write(new String("Not sensotive information (File Activity)¥n").getBytes());} catch (FileNotFoundException e) {mFileView.setText(R.string.file_view);} catch (IOException e) {android.util.Log.e("PrivateFileActivity", "failed to read file");} finally {if (fos != null) {try {fos.close();} catch (IOException e) {android.util.Log.e("PrivateFileActivity", "failed to close file");}}}finish();}/*** Read file process** @param view*/public void onReadFileClick(View view) {FileInputStream fis = null;try {fis = openFileInput(FILE_NAME);byte[] data = new byte[(int) fis.getChannel().size()];fis.read(data);String str = new String(data);mFileView.setText(str);} catch (FileNotFoundException e) {mFileView.setText(R.string.file_view);} catch (IOException e) {android.util.Log.e("PrivateFileActivity", "failed to read file");} finally {if (fis != null) {try {fis.close();} catch (IOException e) {android.util.Log.e("PrivateFileActivity", "failed to close file");}}}}/*** Delete file process** @param view*/public void onDeleteFileClick(View view) {File file = new File(this.getFilesDir() + "/" + FILE_NAME);file.delete();mFileView.setText(R.string.file_view);}}
PrivateUserActivity.java
package org.jssec.android.file.privatefile;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.TextView;public class PrivateUserActivity extends Activity {private TextView mFileView;private static final String FILE_NAME = "private_file.dat";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.user);mFileView = (TextView) findViewById(R.id.file_view);}private void callFileActivity() {Intent intent = new Intent();intent.setClass(this, PrivateFileActivity.class);startActivity(intent);}/*** Call file Activity process** @param view*/public void onCallFileActivityClick(View view) {callFileActivity();}/*** Read file process** @param view*/public void onReadFileClick(View view) {FileInputStream fis = null;try {fis = openFileInput(FILE_NAME);byte[] data = new byte[(int) fis.getChannel().size()];fis.read(data);// *** POINT 4 *** Regarding the information to be stored in files, handle file data carefully and securely.// Omitted, since this is a sample. Please refer to "3.2 Handling Input Data Carefully and Securely."String str = new String(data);mFileView.setText(str);} catch (FileNotFoundException e) {mFileView.setText(R.string.file_view);} catch (IOException e) {android.util.Log.e("PrivateUserActivity", "failed to read file");} finally {if (fis != null) {try {fis.close();} catch (IOException e) {android.util.Log.e("PrivateUserActivity", "failed to close file");}}}}/*** Rewrite file process** @param view*/public void onWriteFileClick(View view) {FileOutputStream fos = null;try {// *** POINT 1 *** Files must be created in application directory.// *** POINT 2 *** The access privilege of file must be set private mode in order not to be used by other applications.fos = openFileOutput(FILE_NAME, MODE_APPEND);// *** POINT 3 *** Sensitive information can be stored.// *** POINT 4 *** Regarding the information to be stored in files, handle file data carefully and securely.// Omitted, since this is a sample. Please refer to "3.2 Handling Input Data Carefully and Securely."fos.write(new String("Sensitive information (User Activity)¥n").getBytes());} catch (FileNotFoundException e) {mFileView.setText(R.string.file_view);} catch (IOException e) {android.util.Log.e("PrivateUserActivity", "failed to read file");} finally {if (fos != null) {try {fos.close();} catch (IOException e) {android.util.Log.e("PrivateUserActivity", "failed to close file");}}}callFileActivity();}}
