【Android數據存儲】- File
阿新 • • 發佈:2017-05-07
idt cti click try exc sum 文件內容 andro mic
openFileOutput(String fileName, int mode) 打開文件輸出流
註:openFileOutput(String fileName, int mode)
中的參數 mode 指定文件打開的形式:
MODE_PRIVATE :該文件僅僅能被當前程序讀寫
MODE_APPEND :以追加的模式打開文件,應用程序能夠向文件裏追加內容
MODE_WORLD_READABLE
:該文件的內容能夠被其它應用程序讀取
MODE_WORLD_WRITEABLE
: 該文件的內容能夠被其它應用程序讀和寫
實例:
本實例程序界面上文件輸入部分有一個輸入框和一個button。點擊button能夠將輸入框中輸入的信息寫入到指定的文件裏去;讀取部分有一個文本框和一個button,點擊button文本框會顯示指定文件裏的內容。
讀取: 寫入:
驗證寫入:
實例代碼:
程序中的 demo.txt 文件能夠通過 File Explorer 中 /data/data/<應用程序包名>/files/demo.txt 看到,例如以下圖所看到的(因為無關文件較多,故分開截成兩幅圖了):
此處以讀取 resource 的 raw 中文件為例,在 res 目錄下新建一個 raw 目錄,將之前的 demo.txt 文件復制進去。
主要代碼:
測試代碼:
註:資源文件下的文件通過 R 文件裏確定的 id 來訪問,如此處 R.raw.demo 。
有時候我們會把一些數據存儲在SD卡上。如今我們來模擬一下。在 File Explorer 視圖中向/mnt/sdcard/文件夾下加入之前的 demo.txt 文件。如今試著讀取該文件裏信息並向當中寫入信息。
主要代碼:
測試代碼:
註: 一般讀寫本應用程序中的文件要使用 openFileInput 和 openFileOutput 。而讀寫 SD 卡中的文件須要使用 FileInputStrea 和 FileOutputStream 。 默認對SD卡中文件僅僅有可讀權限,所以向SD卡中寫入數據時須要增加對應的權限。
個人學習整理。如有不足之處,請不吝不吝賜教。
轉載請註明:@CSU-Max
讀寫本應用程序數據目錄中的文件
此種方法讀寫的文件在/data/data/<應用程序包名>中 android 中提供了 openFileInput(String fileName) 和 openFileOutput(String fileName, int mode) 兩個方法來讀取本應用程序數據目錄中的文件和向其寫入。 openFileInput(String fileName) 打開文件輸入流驗證寫入:
實例代碼:
package com.example.filedemo;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintStream;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
/**
*
* @author CSUMax
* @version 1.0 2014-4-24
*/
public class MainActivity extends Activity {
private Button bt_main_in; // 寫入文件button
private Button bt_main_out; // 讀取文件button
private EditText et_main_in;// 輸入文本框
private TextView tv_main_out;// 顯示文件內容
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bt_main_in = (Button) this.findViewById(R.id.bt_main_in);
bt_main_out = (Button) this.findViewById(R.id.bt_main_out);
et_main_in = (EditText) this.findViewById(R.id.et_main_in);
tv_main_out = (TextView) this.findViewById(R.id.tv_main_out);
// 點擊button將輸入框中的內容寫到文件裏
bt_main_in.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String fileName = "demo.txt";
String text = et_main_in.getText().toString();
writeToFile(text, fileName);
et_main_in.setText("");
}
});
// 點擊button將文件裏內容讀取出來顯示在文本框中
bt_main_out.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String fileName = "demo.txt";
tv_main_out.setText(readFromFile(fileName));
}
});
}
/**
* 讀取文件
*
* @param fileName
* @return
*/
public String readFromFile(String fileName) {
try {
FileInputStream fis = openFileInput(fileName);
byte[] bytes = new byte[1024];
StringBuffer sb = new StringBuffer();
int i = 0;
i = fis.read(bytes);
if (i > 0) {
sb.append(new String(bytes, 0, i));
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 寫入文件
*
* @param text
* 寫入的內容
* @param fileName
* 目標文件的文件名稱
*/
public void writeToFile(String text, String fileName) {
try {
// MODE_APPEND模式寫入。即追加模式
FileOutputStream fos = openFileOutput(fileName, MODE_APPEND);
PrintStream ps = new PrintStream(fos);
ps.println(text);
ps.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
程序中的 demo.txt 文件能夠通過 File Explorer 中 /data/data/<應用程序包名>/files/demo.txt 看到,例如以下圖所看到的(因為無關文件較多,故分開截成兩幅圖了):
讀取資源文件裏的文件
此處以讀取 resource 的 raw 中文件為例,在 res 目錄下新建一個 raw 目錄,將之前的 demo.txt 文件復制進去。
主要代碼:
public class ReadFileUtil {
public static String readFromRaw(Context context, int id) {
String str = "";
try {
// 得到輸入流
InputStream is = context.getResources().openRawResource(id);
int length = is.available();
byte[] bytes = new byte[length];
int i = 0;
i = is.read(bytes);
if (i > 0) {
// 設置編碼
str = EncodingUtils.getString(bytes, "UTF-8");
}
is.close();
return str;
} catch (Exception e) {
// TODO: handle exception
}
return null;
}
}
測試代碼:
public class ReaderTest extends AndroidTestCase {
private static final String TAG = "ReaderTest";
public void testReadFromRaw() {
Log.i(TAG, "---------------");
String str = "Failed";
str = ReadFileUtil.readFromRaw(getContext(), R.raw.demo);
Log.i(TAG, "========>" + str + "<========");
}
}
註:資源文件下的文件通過 R 文件裏確定的 id 來訪問,如此處 R.raw.demo 。
讀寫 SD 卡上的文件
有時候我們會把一些數據存儲在SD卡上。如今我們來模擬一下。在 File Explorer 視圖中向/mnt/sdcard/文件夾下加入之前的 demo.txt 文件。如今試著讀取該文件裏信息並向當中寫入信息。
主要代碼:
public class ReadFileUtil {
public static String readFromSdcard(String fileName) {
String str = "";
try {
FileInputStream fis = new FileInputStream(fileName);
int length = fis.available();
byte[] bytes = new byte[length];
int i = 0;
i = fis.read(bytes);
if (i > 0) {
// 設置編碼
str = EncodingUtils.getString(bytes, "UTF-8");
}
fis.close();
return str;
} catch (Exception e) {
// TODO: handle exception
}
return null;
}
/**
* --註意向SD卡中的文件寫入信息時,要在AndroidManifest.xml文件裏增加對應的權限--
*/
public static void writeToSdcard(String text, String fileName){
try {
//構造方法的第二個參數表示追加模式
FileOutputStream fos = new FileOutputStream(fileName, true);
byte[] bytes = text.getBytes();
fos.write(bytes);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
測試代碼:
public class ReaderTest extends AndroidTestCase {
private static final String TAG = "ReaderTest";
public void testReadFromSdcard() {
Log.i(TAG, "---------------");
String str = "Failed";
str = ReadFileUtil.readFromSdcard("/mnt/sdcard/demo.txt");
Log.i(TAG, "========>" + str + "<========");
}
public void testWriteToSdcard() {
Log.i(TAG, "---------------");
String text = " Max ";
ReadFileUtil.writeToSdcard(text, "/mnt/sdcard/demo.txt");
}
}
註: 一般讀寫本應用程序中的文件要使用 openFileInput 和 openFileOutput 。而讀寫 SD 卡中的文件須要使用 FileInputStrea 和 FileOutputStream 。 默認對SD卡中文件僅僅有可讀權限,所以向SD卡中寫入數據時須要增加對應的權限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
***************************************************************************
* 轉載請註明出處: @CSU-Max http://blog.csdn.net/csu_max *
***************************************************************************
【Android數據存儲】- File