当前位置: 代码迷 >> Android >> 【Android学习】Android数据的四种存储方式(2)-File
  详细解决方案

【Android学习】Android数据的四种存储方式(2)-File

热度:16   发布时间:2016-04-28 06:29:19.0
【Android学习】Android数据的四种储存方式(2)--File

File:即常说的文件(I/O)储存方式,常用储存大量的数据,但缺点就是更新数据将是一件困难的事情。

下面的程序简单示范了如何读写应用数据文件夹中的文件。该程序的界面同样简单,只包含了两个文本输入框和两个按钮:其中第一组文本框和按钮用于处理输入;第二组文本框用于数据处理。其具体代码如下:

package com.ye_yun_lin.filetest;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.PrintStream;import javax.security.auth.PrivateCredentialPermission;import android.os.Bundle;import android.R.integer;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class MainActivity extends Activity {	final String FILE_NAME = "MyData";	private EditText editText1;	private EditText editText2;	private Button button1;	private Button button2;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);				editText1=(EditText)findViewById(R.id.edittext1);		button1=(Button)findViewById(R.id.button1);		editText2=(EditText)findViewById(R.id.edittext2);		button2=(Button)findViewById(R.id.button2);				button1.setOnClickListener(new OnClickListener() {						@Override			public void onClick(View v) {				write(editText1.getText().toString());				editText1.setText("");			}		});				button2.setOnClickListener(new OnClickListener() {						@Override			public void onClick(View v) {				editText2.setText(read());			}		});	}		private String read(){		try {			FileInputStream fileInputStream=openFileInput(FILE_NAME);			byte[] buff=new byte[1024];			int hasRead=0;			StringBuilder sBuilder=new StringBuilder("");			while ((hasRead=fileInputStream.read(buff))>0) {				sBuilder.append(new String(buff,0,hasRead));			}			fileInputStream.close();			return sBuilder.toString();		} catch (Exception e) {			e.printStackTrace();		}		return null;	}		private void write(String content){		try {			FileOutputStream fileOutputStream=openFileOutput(FILE_NAME, MODE_APPEND);			PrintStream printStream=new PrintStream(fileOutputStream);			printStream.println(content);			printStream.close();		} catch (Exception e) {			e.printStackTrace();		}	}}



实例:SD卡文件浏览器:

当程序启动时,系统获取/mnt/sdcard目录下的全部文件、文件夹,并使用ListView将他们显示出来;当用户单击ListView的指定列表时,系统将会显示该列表下全部文件夹和文件。

该程序的界面布局文件如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:id="@+id/path"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentTop="true"/>    <ListView         android:id="@+id/list"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:divider="#000"        android:dividerHeight="1px"        android:layout_below="@id/path">    </ListView>    <Button         android:id="@+id/parent"        android:layout_width="38dp"        android:layout_height="34dp"        android:background="@drawable/home"        android:layout_centerHorizontal="true"        android:layout_alignParentBottom="true"/></RelativeLayout>

主代码:

package com.ye_yun_lin.sdcard;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.os.Bundle;import android.R.integer;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.Button;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {	private TextView textView;	private ListView listView;	private Button button;	private File currentParent;	private File[] currentFiles;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);				textView=(TextView)findViewById(R.id.path);		listView=(ListView)findViewById(R.id.list);		button=(Button)findViewById(R.id.parent);				File root=new File("/mnt/sdcard/");		if(root.exists()){			currentParent=root;			currentFiles=root.listFiles();			inflateListView(currentFiles);		}		listView.setOnItemClickListener(new OnItemClickListener() {			@Override			public void onItemClick(AdapterView<?> parent, View view, int position,					long id) {				if(currentFiles[position].isFile())					return;				File[] tmp=currentFiles[position].listFiles();				if(tmp==null || tmp.length==0){					Toast.makeText(MainActivity.this, "当前路径不可访问或该路径下没有文件", Toast.LENGTH_SHORT);				}				else{					currentParent=currentFiles[position];					currentFiles=tmp;					inflateListView(currentFiles);				}			}					});		button.setOnClickListener(new OnClickListener() {						@Override			public void onClick(View v) {				try {					if (!currentParent.getCanonicalPath().equals("/mnt/sdcard")) {						currentParent=currentParent.getParentFile();						currentFiles=currentParent.listFiles();						inflateListView(currentFiles);					}				} catch (IOException e) {					e.printStackTrace();				}			}		});	}	private void inflateListView(File[] files){		List<Map<String,Object>> listItemsListView=new ArrayList<Map<String, Object>>();		for(int i=0;i<files.length;i++){			Map<String, Object> listItemMap=new HashMap<String, Object>();			if(files[i].isDirectory()){				listItemMap.put("icon", R.drawable.folder);			}else{				listItemMap.put("icon", R.drawable.file);			}			listItemMap.put("fileName", files[i].getName());			listItemsListView.add(listItemMap);		}		SimpleAdapter simpleAdapter=new SimpleAdapter(this,listItemsListView,R.layout.line,new String[]{"icon","fileName"},new int[]{R.id.icon,R.id.file_name});		listView.setAdapter(simpleAdapter);		try {			textView.setText("当前路径为:"+currentParent.getCanonicalPath());		} catch (IOException e) {			e.printStackTrace();		}	}}


  相关解决方案