zoukankan      html  css  js  c++  java
  • 内部存储 使用详解

    极力推荐文章:欢迎收藏
    Android 干货分享

    阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android

    本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

    1. 内部存储的保存路径
    2. 内部存储的(保存,读取)使用方法
    3. 内部存储的Demo
    4. 内部存储的其他方法

    Android 可以直接保存文件到内部存储,保存在内部存储的文件是应用的私有文件,其他应用无法访问,当app被卸载时候,文件也会被删除掉。内部存储经常以文件的形式保存。

    1. 内部存储的保存路径

    内部存储保存路径如下:
    /data/data/com.**包名/files/文件名

    2. 内部存储的(保存,读取)使用方法

    1. 保存文件的方法

    文件保存的常用方法如下:

    • 1.使用文件名称和操作模式调用 openFileOutput()
      这将返回一个 FileOutputStream
    • 2.使用 write() 写入到文件。
    • 3.使用 close() 关闭流式传输。
    	// 1.保存文件方法
    	private void SaveFile() {
    		String filename = etname.getText().toString().trim();
    		String filecontent = etcontent.getText().toString().trim();
    		if (TextUtils.isEmpty(filename) || TextUtils.isEmpty(filecontent)) {
    			Toast.makeText(getApplicationContext(), "文件名不能为空",
    					Toast.LENGTH_LONG).show();
    			return;
    		}
    		// 打开一个用来读写的文件,该文件与当前上下文所在的包相关,调用该方法不需要添加任何全选,
    		// 保存在手机内部存储中
    		try {
    			// 打开输出流,并创建文件
    			FileOutputStream fos = openFileOutput(filename, MODE_PRIVATE);
    			// 输入的内容保存到文件中
    			fos.write(filecontent.getBytes());
    			fos.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		Toast.makeText(getApplicationContext(), "保存成功", Toast.LENGTH_LONG)
    				.show();
    		etname.setText("");
    		etcontent.setText("");
    
    	}
    
    

    2. 读取 File 内容的方法

    1. 调用 openFileInput() 并向其传递要读取的文件名称。 这将返回一个 FileInputStream
    2. 使用 read() 读取文件字节。
    3. 然后使用close() 关闭流式传输。
    	// 2.打开文件方法
    	private void OpenFile() {
    		String filename = etname.getText().toString().trim();
    		if (TextUtils.isEmpty(filename)) {
    			Toast.makeText(getApplicationContext(), "文件名不能为空",
    					Toast.LENGTH_LONG).show();
    			return;
    		}
    		try {
    			// 打开文件得到一个只读的输入流,
    			FileInputStream fis = openFileInput(filename);
    			// 将文件内容存放的byte数组中
    			byte[] buffer = new byte[fis.available()];
    			// 读取数组中的内容
    			fis.read(buffer);
    			fis.close();
    			// 将数组内容存放到字符串中,并显示出来
    			etcontent.setText(new String(buffer));
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    	}
    

    3.删除文件的方法

    如需删除文件,可以根据文件名删除 deleteFile(filename);

    	// 3.删除文件方法
    	private void DeleteFile() {
    		String filename = etname.getText().toString().trim();
    		if (TextUtils.isEmpty(filename)) {
    			Toast.makeText(getApplicationContext(), "文件名不能为空",
    					Toast.LENGTH_LONG).show();
    			return;
    		}
    		// 删除上下文中指定名称的文件,
    		boolean deletefile = deleteFile(filename);
    		if (deletefile) {
    			Toast.makeText(getApplicationContext(), "删除成功", Toast.LENGTH_LONG)
    					.show();
    
    		}
    	}
    

    3. 内部存储的案例

    • 实现效果如下:
      实现文件的保存、读取、删除功能

    内部存储使用

    • 实现代码如下:
    public class FileInternalStorageMethods extends Activity implements
    		OnClickListener {
    	/*
    	 * 内部存储的方法FileOutputStream(filename, MODE_PRIVATE);
    	 * FileInputStream(filename); deleteFile(filename); 文件保存位置:
    	 * /data/data/包名/files/文件名 内部存储的特点: 内部存储里的东西会随着app的卸载而清掉
    	 * 
    	 * *
    	 */
    
    	private EditText etname, etcontent;
    	private Button savebtn, openbtn, deletebtn;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_internal_methods);
    		InitView();
    	}
    
    	private void InitView() {
    		etname = (EditText) findViewById(R.id.editfilename);
    		etcontent = (EditText) findViewById(R.id.edit_filecontext);
    		savebtn = (Button) findViewById(R.id.savefile);
    		openbtn = (Button) findViewById(R.id.openfile);
    		deletebtn = (Button) findViewById(R.id.deletefile);
    
    		savebtn.setOnClickListener(this);
    		openbtn.setOnClickListener(this);
    		deletebtn.setOnClickListener(this);
    
    	}
    
    	@Override
    	public void onClick(View v) {
    		switch (v.getId()) {
    		case R.id.savefile:
    
    			SaveFile();
    			break;
    		case R.id.openfile:
    
    			OpenFile();
    			break;
    		case R.id.deletefile:
    
    			DeleteFile();
    			break;
    		default:
    			break;
    		}
    
    	}
    
    	// 1.保存文件方法
    	private void SaveFile() {
    		String filename = etname.getText().toString().trim();
    		String filecontent = etcontent.getText().toString().trim();
    		if (TextUtils.isEmpty(filename) || TextUtils.isEmpty(filecontent)) {
    			Toast.makeText(getApplicationContext(), "文件名不能为空",
    					Toast.LENGTH_LONG).show();
    			return;
    		}
    		// 打开一个用来读写的文件,该文件与当前上下文所在的包相关,调用该方法不需要添加任何全选,
    		// 保存在手机内部存储中
    		try {
    			// 打开输出流,并创建文件
    			FileOutputStream fos = openFileOutput(filename, MODE_PRIVATE);
    			// 输入的内容保存到文件中
    			fos.write(filecontent.getBytes());
    			fos.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		Toast.makeText(getApplicationContext(), "保存成功", Toast.LENGTH_LONG)
    				.show();
    		etname.setText("");
    		etcontent.setText("");
    
    	}
    
    	// 2.打开文件方法
    	private void OpenFile() {
    		String filename = etname.getText().toString().trim();
    		if (TextUtils.isEmpty(filename)) {
    			Toast.makeText(getApplicationContext(), "文件名不能为空",
    					Toast.LENGTH_LONG).show();
    			return;
    		}
    		try {
    			// 打开文件得到一个只读的输入流,
    			FileInputStream fis = openFileInput(filename);
    			// 将文件内容存放的byte数组中
    			byte[] buffer = new byte[fis.available()];
    			// 读取数组中的内容
    			fis.read(buffer);
    			fis.close();
    			// 将数组内容存放到字符串中,并显示出来
    			etcontent.setText(new String(buffer));
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    	}
    
    	// 3.删除文件方法
    	private void DeleteFile() {
    		String filename = etname.getText().toString().trim();
    		if (TextUtils.isEmpty(filename)) {
    			Toast.makeText(getApplicationContext(), "文件名不能为空",
    					Toast.LENGTH_LONG).show();
    			return;
    		}
    		// 删除上下文中指定名称的文件,
    		boolean deletefile = deleteFile(filename);
    		if (deletefile) {
    			Toast.makeText(getApplicationContext(), "删除成功", Toast.LENGTH_LONG)
    					.show();
    
    		}
    	}
    
    }
    
    • 实现布局 如下:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
    
            <EditText
                android:id="@+id/editfilename"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:background="@android:drawable/edit_text"
                android:hint="请输入文件名"
                android:padding="5dp"
                android:textSize="20sp" />
    
            <Button
                android:id="@+id/savefile"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginLeft="5dp"
                android:padding="5dp"
                android:text="保存"
                android:textSize="25sp" />
    
            <Button
                android:id="@+id/openfile"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginLeft="5dp"
                android:padding="5dp"
                android:text="打开"
                android:textSize="25sp" />
        </LinearLayout>
    
        <Button
            android:id="@+id/deletefile"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:padding="5dp"
            android:text="删除文件"
            android:textSize="25sp" />
    
        <EditText
            android:id="@+id/edit_filecontext"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="@android:drawable/edit_text"
            android:gravity="left"
            android:hint="请输入文件内容"
            android:padding="5dp"
            android:textSize="20sp" />
    
    </LinearLayout>
    

    4. 内部存储的其他方法

    1. 获取在其中存储内部文件的文件系统目录的绝对路径。

     getFilesDir()
    

    2. 在您的内部存储空间内创建(或打开现有的)目录。

     getDir()
    

    3. 返回您的应用当前保存的一系列文件。

     fileList()
    

    至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

    微信关注公众号:  程序员Android,领福利

  • 相关阅读:
    JavaScript之DOM文档对象模型--对HTML元素的增删操作
    JavaScript之DOM文档对象模型--对HTML元素的访问操作
    JavaScript之BOM浏览器对象模型-history
    SpringBoot配置自定义日期参数转换器
    SpringMVC参数绑定(未完待续)
    一个简单的SpringBoot入门程序
    四种JavaEE架构简介
    浏览器禁用Cookie后的Session处理
    基础回顾: 关于Session的一些细节
    使用Cookie实现用户商品历史浏览记录
  • 原文地址:https://www.cnblogs.com/wangjie1990/p/11310904.html
Copyright © 2011-2022 走看看