Android 自動創建文件到scard卡並保存
直接上Activity代碼:
public class DRMPTestActivity extends Activity implements OnClickListener{
String fileName = "";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
/* (non-Javadoc)
* @see android.view.View.OnClickListener#onClick(android.view.View)
*/
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.save:
Time t = new Time();
t.setToNow();
//定義文件名稱
fileName = "DRMP-" + t.year + t.month + t.monthDay
+ t.hour + t.minute + ".txt";
final EditText fileText = new EditText(DRMPTestActivity.this);
fileText.setText(fileName);
// 定義一個對話框
new AlertDialog.Builder(DRMPTestActivity.this)
.setTitle("請輸入文件名")// 標題
.setIcon(android.R.drawable.ic_dialog_info)// 圖標
.setView(fileText)// 為對話框傳入了一個文本編輯框
.setPositiveButton("確定",
// 對話框監聽事件
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
String temp = fileText.getText().toString();
if (temp != null || temp != ""){
fileName = temp;
}
String data = “哈回家啊就是開始卡”;
WriteData(fileName, data);
Toast.makeText(getApplicationContext(), "\""+fileName+"\"正在保存...", Toast.LENGTH_LONG)
.show();
}
}).setNegativeButton("取消", null).show();
break;
}
}
// 將數據存儲到SD卡,filename為文件名,data為要存儲的內容
private void WriteData(String fileName, String data) {
FileService fileService = new FileService(getApplicationContext());
try {
// 判斷SDCard是否存在並且可以讀寫
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
fileService.saveToSD(fileName, data);
} else {
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
fileService代碼:
package com.cmdi.util;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import android.content.Context;
public class FileService {
private Context context;
public FileService(Context context) {
super();
this.context = context;
}
/**
* 寫入文件到SD卡
*
* @throws IOException
*/
public void saveToSD(String fileNameStr, String fileContentStr)
throws IOException {
// 備注:Java File類能夠創建文件或者文件夾,但是不能兩個一起創建
File file = new File("/mnt/sdcard/DRMP");
if (!file.exists()) {
file.mkdir();
}
File file1 = new File(file, fileNameStr);
FileOutputStream fos = new FileOutputStream(file1,true);
fos.write(fileContentStr.getBytes());
fos.close();
}
/**
* 保存文件到手機
*
* @param fileNameStr
* 文件名
* @param fileContentStr
* 文件內容
* @throws IOException
*/
public void save(String fileNameStr, String fileContentStr)
throws IOException {
// 私有操作模式:創建出來的文件只能被本應用訪問,其它應用無法訪問該文件,另外采用私有操作模式創建的文件,寫入文件中的內容會覆蓋原文件的內容
FileOutputStream fos = context.openFileOutput(fileNameStr,
context.MODE_PRIVATE);
fos.write(fileContentStr.getBytes());
fos.close();
}
public void saveAppend(String fileNameStr, String fileContentStr)
throws IOException {
// 追加操作模式:不覆蓋源文件,但是同樣其它應用無法訪問該文件
FileOutputStream fos = context.openFileOutput(fileNameStr,
context.MODE_APPEND);
fos.write(fileContentStr.getBytes());
fos.close();
}
public void saveReadable(String fileNameStr, String fileContentStr)
throws IOException {
// 讀取操作模式:可以被其它應用讀取,但不能寫入
FileOutputStream fos = context.openFileOutput(fileNameStr,
context.MODE_WORLD_READABLE);
fos.write(fileContentStr.getBytes());
fos.close();
}
public void saveWriteable(String fileNameStr, String fileContentStr)
throws IOException {
// 寫入操作模式:可以被其它應用寫入,但不能讀取
FileOutputStream fos = context.openFileOutput(fileNameStr,
context.MODE_WORLD_WRITEABLE);
fos.write(fileContentStr.getBytes());
fos.close();
}
public void saveReadWriteable(String fileNameStr, String fileContentStr)
throws IOException {
// 讀寫操作模式:可以被其它應用讀寫
FileOutputStream fos = context.openFileOutput(fileNameStr,
context.MODE_WORLD_READABLE + context.MODE_WORLD_WRITEABLE);
fos.write(fileContentStr.getBytes());
fos.close();
}
/**
* 讀取文件內容
*
* @param fileNamestr
* 文件名
* @return
* @throws IOException
*/
public String read(String fileNamestr) throws IOException {
FileInputStream fis = context.openFileInput(fileNamestr);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
byte[] data = bos.toByteArray();
return new String(data);
}
}
注意:在主配置文件中需要添加權限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
以上是其主要代碼,想下載DEMO的可以到Linux公社資源下載
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2013年資料/12月/6日/Android 自動創建文件到scard卡並保存
下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm
注意由於這個Demo還有文件上傳功能所以還需要你自己修改,選擇其中有用的部分
更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11