在手机Rom和SDCard保存文件:
1.创建界面
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <EditText android:id="@+id/nameET" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="请输入文件名" android:inputType="text" /> <EditText android:id="@+id/contentET" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="请输入文件内容" android:inputType="textMultiLine" android:maxLines="5" android:minLines="3" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/sdcBT" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClick" android:text="保存到SD卡" /> <Button android:id="@+id/romBT" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClick" android:text="保存到ROM" /> </LinearLayout> </LinearLayout>
2Activity类
import android.app.Activity; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText nameET; private EditText contentET; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); nameET = (EditText) findViewById(R.id.nameET); contentET = (EditText) findViewById(R.id.contentET); } protected void onResume() { // 当界面切换到前台时执行 super.onResume(); // 根据SD卡状态, 设置按钮是否可用 findViewById(R.id.sdcBT).setEnabled( Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)); } public void onClick(View view) { try { String name = nameET.getText().toString(); String content = contentET.getText().toString(); FileService service = new FileService(this); switch (view.getId()) { case R.id.sdcBT: System.out.println("SD卡"); service.saveToSDCard(name, content); break; case R.id.romBT: System.out.println("ROM"); service.saveToRom(name, content); break; } Toast.makeText(getApplicationContext(), "保存成功", Toast.LENGTH_SHORT) .show(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(getApplicationContext(), "保存失败", Toast.LENGTH_SHORT) .show(); } } }
3.FileService文件:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import android.content.Context;
import android.os.Environment;
public class FileService {
private Context context;
public FileService(Context context) {
this.context = context;
}
public void saveToSDCard(String name, String content) throws IOException {
// 获取SD卡所在目录(兼容所有版本)
//2.1之前sd卡根目录为/sdcard
//2.1之后sd卡根目录为/mnt/sdcard
File file = new File(Environment.getExternalStorageDirectory(), name); //获取外存储设备的目录
FileOutputStream fos = new FileOutputStream(file); // 创建输出流, 指向SD卡所在目录
fos.write(content.getBytes()); // 写出文件内容, 默认UTF-8
fos.close();
System.out.println("总空间: " + file.getTotalSpace());
System.out.println("剩余空间: " + file.getFreeSpace());
}
public void saveToRom(String name, String content) throws IOException {
/*
* Context_MODE_PRIVATE表示 文件为私有模式,不能从别的工程或者类来读或者写
* Context.MODE_WORLD_READABLE表示只读
* context.MODE_WORLD_WRITEABLE表示之可写
* Context.MODE_APPEND表示写文件是追加,不是覆盖,且文件为私有,上面三种模式都是覆盖
*/
FileOutputStream fos = context.openFileOutput(name, Context.MODE_PRIVATE);
fos.write(content.getBytes());
fos.close();
}
}
运行效果如下:
如果要读取手机文件内的内容:
public void testRead() throws IOException { FileInputStream fis = new FileInputStream("/data/data/cn.itcast.file/files/private.txt");//读取的文件的路径 ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = fis.read(buffer)) != -1) baos.write(buffer, 0, len); fis.close(); baos.close(); String content = new String(baos.toByteArray()); System.out.println(content); }