保存到内部存储

下面的代码显示了如何将文件保存到内部存储

主布局文件<?xml version="1.0" encoding="utf-8"?>

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Please enter some text" />

android:id="@+id/txtText1"

android:layout_width="fill_parent"

android:layout_height="wrap_content" />

android:id="@+id/btnSave"

android:text="Save"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:onClick="onClickSave" />

android:id="@+id/btnLoad"

android:text="Load"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:onClick="onClickLoad" />

MainActivity.java文件package cn.w3cschool.myapplication3.app;

//www.w3cschool.cn

import android.app.Activity;

import android.os.Bundle;

import android.os.Environment;

import android.view.View;

import android.widget.EditText;

import android.widget.Toast;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

public class MainActivity extends Activity {

EditText textBox;

static final int READ_BLOCK_SIZE = 100;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

textBox = (EditText) findViewById(R.id.txtText1);

}

public void onClickSave(View view) {

String str = textBox.getText().toString();

try {

//SD Card Storage File sdCard = Environment.getExternalStorageDirectory();

File directory = new File(sdCard.getAbsolutePath() +

"/MyFiles");

directory.mkdirs();

File file = new File(directory, "textfile.txt");

FileOutputStream fOut = new FileOutputStream(file);

OutputStreamWriter osw = new

OutputStreamWriter(fOut);

osw.write(str);

osw.flush();

osw.close();

Toast.makeText(getBaseContext(),

"File saved successfully!",

Toast.LENGTH_SHORT).show();

textBox.setText("");

} catch (IOException ioe) {

ioe.printStackTrace();

}

}

}

注意1

上述代码使用getExternalStorageDirectory()方法返回外部存储的完整路径。

通常,它应该返回真实设备的“/sdcard”路径,以及Android模拟器的“/mnt/sdcard”路径。

你不应该尝试硬编码到SD的路径卡,因为制造商可能选择为SD卡分配不同的路径名称。

注意2

为了写入外部存储,你需要在AndroidManifest.xml文件中添加WRITE_EXTERNAL_STORAGE的权限:<?xml version="1.0" encoding="utf-8"?>

package="cn.w3cschool.Files"

android:versionCode="1"

android:versionName="1.0" >

android:icon="@drawable/ic_launcher"

android:label="@string/app_name" >

android:label="@string/app_name"

android:name=".FilesActivity" >

从内部存储写入和读取

下面的代码显示了如何从内部存储写入和读取。

主布局xml文件<?xml version="1.0" encoding="utf-8"?>

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical">

android:id="@+id/internal_storage_label"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_marginBottom="10px"

android:text="Enter some text to write on the internal storage, then read back:" />

android:id="@+id/internal_storage_input"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_marginBottom="10px" />

android:id="@+id/internal_storage_write_button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Write" />

android:id="@+id/internal_storage_read_button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Read" />

android:id="@+id/internal_storage_output"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_marginBottom="10px" />

主Activity Java代码//www.w3cschool.cn

package cn.w3cschool.myapplication3.app;

import android.app.Activity;

import android.content.Context;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

import android.widget.Toast;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.Scanner;

public class MainActivity extends Activity {

private static final String LINE_SEP = System.getProperty("line.separator");

private EditText input;

private TextView output;

private Button write;

private Button read;

@Override

public void onCreate(final Bundle icicle) {

super.onCreate(icicle);

this.setContentView(R.layout.activity_main);

this.input = (EditText) findViewById(R.id.internal_storage_input);

this.output = (TextView) findViewById(R.id.internal_storage_output);

this.write = (Button) findViewById(R.id.internal_storage_write_button);

this.write.setOnClickListener(new OnClickListener() {

public void onClick(final View v) {

write();

}

});

this.read = (Button) findViewById(R.id.internal_storage_read_button);

this.read.setOnClickListener(new OnClickListener() {

public void onClick(final View v) {

read();

}

});

}

private void write() {

FileOutputStream fos = null;

try {

// note that there are many modes you can use fos = openFileOutput("test.txt", Context.MODE_PRIVATE);

fos.write(input.getText().toString().getBytes());

Toast.makeText(this, "File written", Toast.LENGTH_SHORT).show();

input.setText("");

output.setText("");

} catch (FileNotFoundException e) {

Log.e("www.w3cschool.cn", "File not found", e);

} catch (IOException e) {

Log.e("www.w3cschool.cn", "IO problem", e);

} finally {

try {

fos.close();

} catch (IOException e) {

// ignore, and take the verbosity punch from Java ;) }

}

}

private void read() {

FileInputStream fis = null;

Scanner scanner = null;

StringBuilder sb = new StringBuilder();

try {

fis = openFileInput("test.txt");

// scanner does mean one more object, but it"s easier to work with scanner = new Scanner(fis);

while (scanner.hasNextLine()) {

sb.append(scanner.nextLine() + LINE_SEP);

}

Toast.makeText(this, "File read", Toast.LENGTH_SHORT).show();

} catch (FileNotFoundException e) {

Log.e("www.w3cschool.cn", "File not found", e);

} finally {

if (fis != null) {

try {

fis.close();

} catch (IOException e) {

// ignore, and take the verbosity punch from Java ;) }

}

if (scanner != null) {

scanner.close();

}

}

output.setText(sb.toString());

}

}

73d5428347e7c5e8717e1acacb833eca.png

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐