android手机内存本来就不大,要是老把数据放在手机里,很明显会让手机的使用者体验到什么是“卡”,所以,我们把数据要放到SD卡中,以减少手机内存的使用,本文仅写入文件,不对读文件进行说明。好,go!
第一步:新建android项目,命名为Test
next -> next ..一切默认
第二步:在AndroidManifest.xml中添加权限
往往是用到什么再最后加权限,既然现在的目的很明确,就直接将文件创建删除权限以及SD卡的读写权限一并添加上了
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
别忘了,这些权限是加在<application>标签对的外面
第三步:创建界面,默认已经生成了layout文件 activity_main.xml
现在要实现的功能只是以追加形式写文件并把文件保存到SD卡中,对界面没什么需求,界面不改了,默认显示出hello world 吧
第四步:完善代码
核心功能来了,直接附上代码吧
MainActivity.JAVA
- 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");
- }
-
-
-
-
-
-
-
- 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();
- }
- }
- }
-
-
-
-
-
-
-
- public static void method2(String fileName, String content) {
- try {
-
- FileWriter writer = new FileWriter(fileName, true);
- writer.write(content);
- writer.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-
-
-
-
-
-
-
-
- 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);
- if (sdCardExist) {
- sdDir = Environment.getExternalStorageDirectory();
- }
- return sdDir.toString();
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
-
- getMenuInflater().inflate(R.menu.activity_main, menu);
- return true;
- }
- }
经本人联想630真机测试,完全通过。
至此,要对以上代码做一些说明
1.RandomAccessFile是用来访问那些保存数据记录的文件的,这样你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。
2.细心的朋友会发现,中文存入之后会出现乱码,乱码的问题就不在这进行解决了,先写到这吧
感谢http://blog.csdn.net/mexican_ok/article/details/12686279