- 文件存储
1.直接利用Activity提供文件操作方法
data\data\<package name>\file\文件名称
文件操作也一共两个方法,一个是文件输出
Activity代码如下:
public class MainActivity extends Activity {
private static final String FILENAME="ee";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FileOutputStream output=null;
try {
//设置文件输出名称及创建模式
output=super.openFileOutput(FILENAME,Activity.MODE_PRIVATE);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
PrintStream out=new PrintStream(output);
out.println("姓名: 张依依 ");
out.println("年龄: 21 ");
out.println("地址: 湖南大学");
//关闭输出流
out.close();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
输出路径同上一堂课路径一致DDMS
现在我们实现读入文件:
只需要增添这几句:
private TextView txt=null;
添加输入:
//输入方法
txt=(TextView)super.findViewById(R.id.msg);
FileInputStream input=null;
try {
input=super.openFileInput(FILENAME);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Scanner scan=new Scanner(input);//定义scanner
while(scan.hasNext()){
txt.append(scan.next()+"\n");
}
scan.close();//关闭输入流
实现效果如图:
实现上面的代码似乎我们可以想存就存了,但是!!!现在手机的内存一般都比较小,空间也早被其他霸道软件占据,当然土豪机那种机身内存16G,32G的另算,一般来说我们会把数据存到SD卡上,sd卡大家都知道是什么吧,黑黑的插卡,那么接下来的移花接木看好了:
因为默认存储位置是在手机,那么我们给它改变路径
代码如下:
public class MainActivity extends Activity {
private static final String FILENAME="/storage/extSdCard/eedata/authoree.txt";//文件名称
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File file=new File(FILENAME);
if(!file.getParentFile().exists()){
file.getParentFile().mkdirs();
}
PrintStream out=null;
try {
out=new PrintStream(new FileOutputStream(file));
out.println("姓名: 张依依 ");
out.println("年龄: 21 ");
out.println("地址: 湖南大学");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(out!=null){
out.close();
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
注意记得配置权限:
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
/>
还有因为此程序要用到sd卡,首先自己的虚拟你查看时候要配置好sd卡,也就是创建虚拟机时要勾选sd卡的选项,建议用手机实验。
实现效果如下:
接下来我们要把它读出来
实际上在io流中,刚才我们的操作是写入。
读到手机上其实也很简单,要知道QQ不在线也可以浏览聊天信息是使用了本地存储,而需要联网刷新更早的聊天记录是因为通过了后台网站服务器的数据库,学完本课是不是有点小激动去实现自己的不在线预览功能呢了,言归正传,开始写入
布局文件定义:
<TextView
android:id="@+id/msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
添加输出
Activity代码定义,只需要加上FileInputStream操作即可,与前面读文件异曲同工
public class MainActivity extends Activity {
private static final String FILENAME="authoree.txt";//文件名称
private static final String DIR="eedata";//文件名称
private TextView txt=null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.txt=(TextView)super.findViewById(R.id.msg);
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//如果Sd卡存在
File file=new File(Environment.getExternalStorageDirectory().toString()+
File.separator+DIR+File.separator+FILENAME);
if(!file.getParentFile().exists()){
file.getParentFile().mkdirs();
}
//写入方法
// PrintStream out=null;
// try {
// out=new PrintStream(new FileOutputStream(file));
// out.println("姓名: 张依依 ");
// out.println("年龄: 21 ");
// out.println("地址: 湖南大学");
// } catch (FileNotFoundException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }finally{
// if(out!=null){
// out.close();
// }
// }
//输入方法
Scanner scan=null;//定义scanner
try {
scan=new Scanner(new FileInputStream(file));
while(scan.hasNext()){
txt.append(scan.next()+"\n");
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(scan!=null){
scan.close();//关闭输入流
}
}
}else{
Toast.makeText(this, "SD卡不存在读取失败", Toast.LENGTH_LONG).show();//sd卡不存在提示
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
同时我们看一下没有sd卡的虚拟机运行效果
读取效果如图: