android手機內存本來就不大,要是老把數據放在手機裡,很明顯會讓手機的使用者體驗到什麼是“卡”,所以,我們把數據要放到SD卡中,以減少手機內存的使用,本文僅寫入文件,不對讀文件進行說明。好,go!
第一步:新建android項目,命名為Test
next -> next ..一切默認
第二步:在AndroidManifest.xml中添加權限
往往是用到什麼再最後加權限,既然現在的目的很明確,就直接將文件創建刪除權限以及SD卡的讀寫權限一並添加上了<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KCjxwcmUgY2xhc3M9"brush:java;">
別忘了,這些權限是加在標簽對的外面
第三步:創建界面,默認已經生成了layout文件 activity_main.xml
現在要實現的功能只是以追加形式寫文件並把文件保存到SD卡中,對界面沒什麼需求,界面不改了,默認顯示出hello world 吧
第四步:完善代碼
核心功能來了,直接附上代碼吧
MainActivity.JAVA
[java] view
plaincopy
-
package com.example.test;
-
-
import java.io.BufferedWriter;
-
import java.io.File;
-
import java.io.FileInputStream;
-
import java.io.FileOutputStream;
-
import java.io.FileWriter;
-
import java.io.IOException;
-
import java.io.OutputStreamWriter;
-
import java.io.RandomAccessFile;
-
-
import android.app.Activity;
-
import android.os.Bundle;
-
import android.os.Environment;
-
import android.view.Menu;
-
-
public class MainActivity extends Activity {
-
FileOutputStream fos;
-
FileInputStream fis;
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_main);
-
String fileName = getSDPath() + "/" + "testYL.txt";
-
method1(fileName, "I am the new content\n");
-
method2(fileName, "I am the new content\n");
-
method3(fileName, "I am the new content\n");
-
}
-
-
/**
-
* 追加文件:使用FileOutputStream,在構造FileOutputStream時,把第二個參數設為true
-
*
-
* @param fileName
-
* @param content
-
*/
-
public static void method1(String file, String conent) {
-
BufferedWriter out = null;
-
try {
-
out = new BufferedWriter(new OutputStreamWriter(
-
new FileOutputStream(file, true)));
-
out.write(conent);
-
} catch (Exception e) {
-
e.printStackTrace();
-
} finally {
-
try {
-
out.close();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
-
/**
-
* 追加文件:使用FileWriter
-
*
-
* @param fileName
-
* @param content
-
*/
-
public static void method2(String fileName, String content) {
-
try {
-
// 打開一個寫文件器,構造函數中的第二個參數true表示以追加形式寫文件
-
FileWriter writer = new FileWriter(fileName, true);
-
writer.write(content);
-
writer.close();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
-
/**
-
* 追加文件:使用RandomAccessFile
-
*
-
* @param fileName
-
* 文件名
-
* @param content
-
* 追加的內容
-
*/
-
public static void method3(String fileName, String content) {
-
try {
-
// 打開一個隨機訪問文件流,按讀寫方式
-
RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");
-
// 文件長度,字節數
-
long fileLength = randomFile.length();
-
// 將寫文件指針移到文件尾。
-
randomFile.seek(fileLength);
-
randomFile.writeBytes(content);
-
randomFile.close();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
-
public String getSDPath() {
-
File sdDir = null;
-
boolean sdCardExist = Environment.getExternalStorageState().equals(
-
android.os.Environment.MEDIA_MOUNTED); // 判斷sd卡是否存在
-
if (sdCardExist) {
-
sdDir = Environment.getExternalStorageDirectory();// 獲取跟目錄
-
}
-
return sdDir.toString();
-
}
-
-
@Override
-
public boolean onCreateOptionsMenu(Menu menu) {
-
// Inflate the menu; this adds items to the action bar if it is present.
-
getMenuInflater().inflate(R.menu.activity_main, menu);
-
return true;
-
}
-
}
經本人聯想630真機測試,完全通過。
至此,要對以上代碼做一些說明
1.RandomAccessFile是用來訪問那些保存數據記錄的文件的,這樣你就可以用seek( )方法來訪問記錄,並進行讀寫了。這些記錄的大小不必相同;但是其大小和位置必須是可知的。
2.細心的朋友會發現,中文存入之後會出現亂碼,亂碼的問題就不在這進行解決了,先寫到這吧