Android-数据库的存储与访问-文件读写

文件读写

1.文件类型

  1. 资源文件(只读,不能进行写操作)
    –raw和asset资源文件
  2. 数据区文件
  3. SD卡文件

2.raw与asset的区别

相同点:
这2个目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。

不同点:

  1. raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
  2. raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹,在AssertManager中不能处理单个超过1MB的文件,不然会报异常。
  3. assets 文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像 xml, java 文件被预编译,可以存放一些图片、html、js、css 等文件。

3.文件操作模式

在这里插入图片描述

4.文件读写方式https://www.jianshu.com/p/4c020b45f9e3

1)资源文件(只读)两种资源文件,使用两种不同的方式进行打开使用。
( 1 )raw使用InputStream in = getResources().openRawResource(R.raw.test);
( 2 )asset使用InputStream in = getResources().getAssets().open(fileName);

2)数据区文件(/data/data/<应用程序名>目录上的文件)
( 1 )写操作:FileOutputStream fout =openFileOutput(fileName, MODE_PRIVATE);
( 2 )读操作:FileInputStream fin = openFileInput(fileName);
( 3 )数据区地址,见下

3)sdcard数据
( 1 )读操作:FileInputStream fin = new FileInputStream(fileName);
( 2 )写操作:FileOutputStream fout = new FileOutputStream(fileName);

5.使用File类进行文件的读写

File.getName():获得文件或文件夹的名称
File.getParent():获得文件或文件夹的父目录
File.getAbsoultePath():绝对路经
File.getPath():相对路经
File.createNewFile():建立文件
File.mkDir():建立文件夹
File.isDirectory():判断是文件或文件夹
File[] files = File.listFiles():列出文件夹下的所有文件和文件夹名
File.renameTo(dest):修改文件夹和文件名
File.delete():删除文件夹或文件

6.数据区文件地址(软件:Eclipse)–删除文件

在软件的右上角操作
在这里插入图片描述
调出下面的页面
在这里插入图片描述
关闭–右键单机图标-close

6.1删除文件

选中文件,点击右上角的减号
在这里插入图片描述

6.2 引入文件或者导出文件

1,Pull File 保存

在这里插入图片描述

6.3 eclipse DDMS导出文件失败解决方法

报错信息
Failed to push selection: Local path doesn’t exist.

6.4 读取DDMS文件的工具

NotePad++

7.SD卡地址(软件:Eclipse)

在软件的右上角操作
在这里插入图片描述
调出下面的页面
在这里插入图片描述

8.读取Raw资源文件代码

1.在项目里的res目录下建立与layout同级的目录raw,并在raw目录下新建文件demo,在文件demo里写入资源文件raw读取测试
2.xml文件–设置一个文本组件(用来显示demo文件的内容),按钮组件(设置监听事件)

	<TextView
        android:id="@+id/tv_show"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="info显示区域" 
        />
    
    <Button
        android:id="@+id/btn_war"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="war资源文件的读取" 
        />

3.main.java文件----获取组件,设置监听事件,并写读取文件的readRawFile方法

public class MainActivity extends Activity {

	private TextView tv_show;               
	private Button btn_war;                 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		tv_show = (TextView) findViewById(R.id.tv_show);    //获取文本对像
		btn_war = (Button) findViewById(R.id.btn_war);      //获取按钮对象
		btn_war.setOnClickListener(new OnClickListener() {  //设置监听事件			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				readRawFile();                              //调用读取方法
			}
		});
	}//onCreate方法结束
	
	private void readRawFile(){	
		InputStream in = getResources().openRawResource(R.raw.demo);//用InputStream 获取文件资源
		try {
			int length = in.available();//获取文件大小,报错try/catch
			byte[] buffer = new byte[length];  //把文件的大小传进去 
			while(in.read(buffer)!=-1){ } //in.read(buffer);等价于while(in.read(buffer)!=-1){}     	
			in.close();                   //关闭资源
			tv_show.setText(new String(buffer,"GBK"));     //传入文本-解决乱码  
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}
}

注意:更改编码格式-buffer变成GBK格式---------new String(buffer,"GBK")

9.数据区写入和读取

1.xml文件,两个按钮,(设置,读取和写入监听事件)一个EditText(写入信息),TextView(展示信息)

展示读取信息
    <TextView 
        android:id="@+id/tv_show"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="info显示区域" 
        />
输入写入信息        
    <EditText
        android:id="@+id/ev_demo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="写入数据" 
        />        
    <Button
        android:id="@+id/btn_shujuqu_write"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="数据区文件写入" 
        />
    <Button
        android:id="@+id/btn_shujuqu_read"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="数据区文件读取" 
        />

2.java文件

 onCreate{
		获取`写入`按钮,设置监听
		获取`读取`按钮,设置监听
		
		写入onClick(){
		writeData();      //调用写入方法
		}
		
		读取onClick(){
		readData();      //调用读取方法
		}
  }

	//数据区写入
	private void writeData (){
		String str = ev_demo.getText().toString();     //获取写入内容
		try {                                    //文件名        模式-
			FileOutputStream fo = openFileOutput("data", MODE_APPEND);   //写入数据, try/catch
			fo.write(str.getBytes());            //以字节的形式写入
			fo.flush();                          //提交写操作
			fo.close();                          //关闭资源
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
 }

	//数据区读取
	private void readData(){
		try {                                   //读取文件名
			FileInputStream fin = openFileInput("data");   //读取数据 ,try/catch
			byte[] buffer = new byte[fin.available()];     //获取长度
			fin.read(buffer);
			tv_show.setText(new String(buffer));            //未设置编码格式
			fin.close();	
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

在这里插入图片描述

10.SD卡文件读写-未完待续----

1.首先设置读写权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值