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小知识点代码片段

操作栏标签片段中的片段?

Android 插件化VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )(代码片段

Android获取各个应用程序的缓存文件代码小片段(使用AIDL)

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

Android Studio - 片段按钮操作