Android 文件操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 文件操作相关的知识,希望对你有一定的参考价值。
读取Assets中的文件数据
在asset目录下的资源是无法直接访问的原生资源,但是这个目录保存的文件可以打包在程序里,android应用通过Assetmanager来管理该目录下的原始资源.
Android不为Assets下的文件生成id,如要使用assets里的文件,需要指定文件的路径和文件名。
代码使用示例:
(1)在assets中创建文件:info.txt
文件内容为:
1,这是使用UTF-8编写的一个文本
2,这是第二行代码
3,3行
4,4行
//读取的内容会随着文件的改变而改变 try { //读取的是字节流 InputStream is=getResources().getAssets().open("info.txt"); //UTF-8编码的指定是很重要的 InputStreamReader isr=new InputStreamReader(is,"UTF-8"); BufferedReader bfr=new BufferedReader(isr); String in=""; while((in=bfr.readLine())!=null) { Log.i(TAG, in); } // Log.i(TAG, bfr.readLine()); } catch (IOException e) { e.printStackTrace(); }
三、读取raw目录中的文件数据
如果你想要将静态文件保存在您的应用程序在编译时,将文件保存在您的项目res/raw/目录。Android SDK会处理该目录下原始资源,并会在R清单类中为该目录下的资源生成一个索引项。
你可以打开它与openRawResource(),通过R.raw.<filename>的资源 id。此方法返回的InputStream,您可以使用读取该文件 (但你不能写入原始文件)。
InputStream is=getResources().openRawResource(R.raw.info); InputStreamReader isr=new InputStreamReader(is,"UTF-8"); BufferedReader bfr=new BufferedReader(isr); String instring=""; while((instring=bfr.readLine())!=null) { Log.i(TAG, instring); }
四、读写内部存储的文件数据
程序一旦在虚拟机或真机运行后,程序就会在固定地方创建一个文件夹。
应用程序的数据文件默认位置保存在:
/data/data/<package name>/files 目录下。
<package name>代表应用程序的包名。
FileInputStream openFileInput(String name):打开应用程序的数据文件夹下的name文件对应输入流。
FileOutputStream openFileOutput(String name,int mode):打开应用程序的数据文件夹下的name文件对应输出流。
参数:mode 指定打开文件的模式,该模式支持如下值:
MODE_PRIVATE :该文件只能被当前程序读写。
MODE_APPEND:以追加方式打开该文件,应用程序可以向该文件中追加内容。
MODE_WORLD_READABLE:该文件的内容可以被其他应用程序读取。
MODE_WORLD_WRITEABLE:该文件的内容可由其他程序读、写。
getDir(String name,int mode):
在应用程序的数据文件夹下获取或创建name对应的子目录。
File getFilesDir():
获取该应用程序的数据文件夹的绝对路径。
String[] fileList():
返回该应用程序中的数据文件夹下的全部文件。
deleteFile(String):
删除该应用程序的数据文件夹下的指定文件。
2,文件的创建、删除、重命名
//创建文件的名称
public static final String FILE_NAME="myFile.txt";
(1)创建文件代码示例:
File file=new File(FileUtil.FILE_NAME);
//文件是否存在
if(!file.exists())
{
try {
//文件不存在,就创建一个新文件
file.createNewFile();
System.out.println("文件已经创建了");
} catch (IOException e) {
e.printStackTrace();
}
}
else
{
System.out.println("文件已经存在");
System.out.println("文件名:"+file.getName());
System.out.println("文件绝对路径为:"+file.getAbsolutePath());
//是存在工程目录下,所以
System.out.println("文件相对路径为:"+file.getPath());
System.out.println("文件大小为:"+file.length()+"字节");
System.out.println("文件是否可读:"+file.canRead());
System.out.println("文件是否可写:"+file.canWrite());
System.out.println("我呢间是否隐藏:"+file.isHidden());
}
(2)删除文件示例:
File file=new File(FileUtil.FILE_NAME);
//文件是否存在
if(file.exists())
{
file.delete();
System.out.println("文件已经被删除了");
}
(3)为文件重命名示例:
File file=new File(FileUtil.FILE_NAME);
File newFile=new File("anotherFile.txt");
file.renameTo(newFile);
System.out.println("文件已经成功地被命名了"+file.getName());
注意:当我们为文件重命名时,仅仅操作的是文件本身,内部的内容不会改变。
2,文件夹的创建和删除
//创建文件夹的名称
//public static final String FOLDER_NAME="NewFolder";
//多级目录,不能用/
/*
* File.separator路径分隔符
* 在文件夹的目录结构中,只要任一级目录不存在,那么都会不存在。
* 比如"NewFolder2"+File.separator+"separator2"此路径,NewFolder2没有存在,
* 所以NewFolder2和separator2都不存在
* */
public static final String FOLDER_NAME=
"NewFolder"+File.separator+"separator";
(1)创建文件夹代码示例
File folder=new File(FileUtil.FOLDER_NAME);
if(!folder.exists())
{
//创建文件夹,一旦存在相同的文件或文件夹,是不可能存在的。
/*
* * 在文件夹的目录结构中,只要任一级目录不存在,那么都会不存在。
* 比如"NewFolder2"+File.separator+"separator2"此路径,NewFolder2没有存在,
* 所以NewFolder2和separator2都不存在
* */
// folder.mkdir();
/*
* 不管路径是否存在,都会慢慢向下一级创建文件夹。
* 所以创建文件夹我们一般用此方法,确定稳定性。
* */
folder.mkdirs();
}
File同时可以表示文件或文件夹
(2)删除文件夹
File folder=new File(FileUtil.FOLDER_NAME);
if(folder.exists())
{
/*
* 在移除的时候,只会移除最下层的目录,不会移除多层目录。
* */
folder.delete();
}
以上是关于Android 文件操作的主要内容,如果未能解决你的问题,请参考以下文章
Android 插件化VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )(代码片段
Android获取各个应用程序的缓存文件代码小片段(使用AIDL)
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情