文件读写
1.文件类型
- 资源文件(只读,不能进行写操作)
–raw和asset资源文件 - 数据区文件
- SD卡文件
2.raw与asset的区别
相同点:
这2个目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。
不同点:
- raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
- raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹,在AssertManager中不能处理单个超过1MB的文件,不然会报异常。
- 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"/>