Android file类使用详解-程序员宅基地

技术标签: Android  

前言

    最近使用File,发现要配合FileProvider类使用,其中File让我头大,所以索性记录一下

Android file类

   在开发Android应用时免不了会跟文件打交道,本篇文章记录总结自己常用到的文件操作,数据的存储有多种方式,比如数据库存储、SharedPreferences存储、文件存储等;这里我们将要介绍最简单的文件存储方式;文件存储简单的来说就是一般的JAVASE中的IO流,只是把他应用于Android手机中而已。

Android file类使用

   File文件的存储需要在程序中使用sdcard进行数据的存储,需要在AndroidMainfset.xml文件中进行权限的配置:

  • SDCard中创建与删除文件权限:
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    
  • SDCard写入数据权限
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    

   代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.cxy.file">
    <uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

File类语法

继承包
public class File
extends Object implements Serializable, Comparable

java.lang.Object
↳ java.io.File

File类语法

File(String pathname)
Creates a new File instance by converting the given pathname string into an abstract pathname.
通过将给定的路径名字符串转换为一个抽象的路径名来创建一个新的文件实例。
//例如----File file = new File ("/mnt/sdcard/test.txt");
File(String parent, String child)
Creates a new File instance from a parent pathname string and a child pathname string.
从父路径名字符串和子路径名字符串创建一个新的文件实例。
//例如----File file = new File("/mnt/sdcard/", "test.txt");

File(File parent, String child)
Creates a new File instance from a parent abstract pathname and a child pathname string.
从父抽象路径名和子路径名字符串创建一个新的文件实例。

File(URI uri)
Creates a new File instance by converting the given file: URI into an abstract pathname.

File类常用方法

boolean exists() 测试文件是否存在
boolean delete() 删除此对象指定的文件
boolean createNewFile() 创建新的空文件
boolean isDirectory() 测试此File对象表示的文件是否是目录
boolean mkdir() 创建由该File对象表示的目录
boolean mkdirs() 创建包括父目录的目录
String getAbsolutePath() 返回此对象表示的文件的绝对路径名
String getName() 返回此对象表示的文件的名称
String getParent() 返回此File对象的路径名的上一级,若路径名没有上一级,则返回null

使用mkdir创建由该File对象表示的目录

package com.example.cxy.file;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.File;
import java.io.IOException;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    
    private Button btn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }
    private void initView(){
    
        btn= (Button) findViewById(R.id.button);
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
    
        //先实例化一个file对象,参数为路径名
        File file = new File("/mnt/sdcard/Tenect/chenxiaoyang.txt");
        //File file = new File("/mnt/sdcard/Tenect","chenxiaoyang.txt");
        try {
    
            //判断文件是否存在
            if (file.exists()){
    
                //文件如果存在删除这个文件
                file.delete();

                Toast.makeText(MainActivity.this, "删除成功了", Toast.LENGTH_SHORT).show();
            }else{
    
                //创建一个新的文件
                file=new File("/mnt/sdcard/Tenect");
                //先创建文件夹
                file.mkdir();
                //创建这个文件
                file = new File("/mnt/sdcard/Tenect/chenxiaoyang.txt");
                file.createNewFile();
                Toast.makeText(MainActivity.this, "创建成功了", Toast.LENGTH_SHORT).show();
            }
            //获取当前file文件的绝对路径
            Log.i("$$$",file.getAbsolutePath());
            //获取当前file文件的名字,包括后缀名
            Log.i("$$$",file.getName());
            //获取当前file文件的以上所有级的目录
            Log.i("$$$",file.getParent());
            //测试此file文件是否是一个目录
            boolean directory=file.isDirectory();
            Log.i("$$$",String.valueOf(directory));
        } catch (IOException e) {
    
            e.printStackTrace();
            Toast.makeText(MainActivity.this, "失败了", Toast.LENGTH_SHORT).show();
        }
    }
}

使用mkdirs创建包括父目录的目录

package com.example.cxy.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.File;
import java.io.IOException;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    
    private Button btn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        inintView();
    }

    private void inintView() {
    
        btn= (Button) findViewById(R.id.button);
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
    
        //先实例化一个file对象,参数为路径名
        File file=new File("/mnt/sdcard/tmp/one/two/three","test.txt");
        try {
    
            //判断文件是否存在
            if(file.exists()){
    
                //文件如果存在删除这个文件
                file.delete();
                Toast.makeText(MainActivity.this,"删除成功", Toast.LENGTH_SHORT).show();
            }else{
    
                //创建一个新的文件
                file=new File("/mnt/sdcard/tmp/one/tow/three");
                //先创建文件夹,mkdirds可直接创建多级文件夹
                file.mkdirs();
                //创建这个文件
                file=new File("/mnt/sdcard/tmp/one/tow/three/test.txt");
                file.createNewFile();
            }
        } catch (IOException e) {
    
            e.printStackTrace();
        }
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/CLinuxF/article/details/112260244

智能推荐

详解冬奥冠军背后的AI黑科技-程序员宅基地

文章浏览阅读3.6k次。用人工智能普惠体育发展。

form表单提交的几种方式_提交表单-程序员宅基地

文章浏览阅读10w+次,点赞92次,收藏495次。表单提交方式一:直接利用form表单提交html页面代码:<!DOCTYPE html><html><head><meta charset="UTF-8" /><title>Insert title here</title></head><body><form action="h..._提交表单

Unity Spine SkeletonGraphic 动画重复播放 过度残影透明渐变Bug 解决方案_unity skeletongraphic-程序员宅基地

文章浏览阅读5.1k次。Unity Spine SkeletonGraphic 重复播放 过度残影Bug 解决方案不推荐使用SetToSetupPose和Setup Pose相关,代码直接贴上/// <summary>/// Spine播放设置/// </summary>/// <param name="trackIndex">填写0</param>/// <param name="animationName">动画名</param>/// &l_unity skeletongraphic

高斯分布3——边缘概率与条件概率_高斯分布的条件概率-程序员宅基地

文章浏览阅读3.5k次。一、推导过程:二、结果:边缘分布x1,x2 各自依然服从 μi,写反差矩阵 Σii 的多元高斯分布;条件概率分布给定 xj 求 xi 的分布:μi|j=μi+ΣijΣ−1jj(xj−μj)Σi|j=Σjj−ΣTijΣ−1iiΣij..._高斯分布的条件概率

Ratelimitcache: Python缓存库,支持速率限制-程序员宅基地

文章浏览阅读339次,点赞8次,收藏8次。Ratelimitcache: Python缓存库,支持速率限制项目链接: https://gitcode.com/simonw/ratelimitcache?utm_source=artical_gitcode如果你正在寻找一个Python缓存库,并且希望对缓存操作进行速率限制,那么Ratelimitcache可能是你的理想选择。什么是Ratelimitcache?Ratelimitca..._python ratelimit基于什么

【爬虫】Xpath和CSS信息提取的方法异同点_xpath 获取css-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏8次。Xpath和CSS信息提取的方法异同点_xpath 获取css

随便推点

基于OFDM+64QAM系统的载波同步matlab仿真,输出误码率,星座图,鉴相器,锁相环频率响应以及NCO等-程序员宅基地

文章浏览阅读454次。正交频分复用(OFDM)是一种在现代通信系统中广泛使用的调制技术,它具有高效的频谱利用和抗多径衰落等特点。64QAM(64-ary Quadrature Amplitude Modulation)是一种调制方式,可以在每个符号中传输更多的位信息。在OFDM系统中,保持载波同步对确保数据传输的可靠性至关重要。_基于ofdm+64qam系统的载波同步matlab仿真,

Springboot毕设项目超市商品销售管理系统37x2w(java+VUE+Mybatis+Maven+Mysql)_vue+springboot+mybatis商品管理系统-程序员宅基地

文章浏览阅读67次。Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。若包含,则为maven项目,否则为非maven项目。Springboot毕设项目超市商品销售管理系统37x2w(java+VUE+Mybatis+Maven+Mysql)Springboot + mybatis + Maven + Vue 等等组成,B/S模式 + Maven管理等等。其他版本理论上也可以。_vue+springboot+mybatis商品管理系统

关掉\禁用win7自动配置ipv4地址的方法 默认网关自动消失的解决办法_禁止修改网关命令-程序员宅基地

文章浏览阅读3w次,点赞2次,收藏4次。转载自: http://blog.csdn.net/zouqin369/article/details/6913692 今天去公司设置好IP后,无论怎么样都上不了internet,再次打开本地后发现默认网关自动消失,cmd下输入ipconfig后的现象如下: 物理地址. . . . . . . . . . . . . : 00-22-64-55-76-8F DHCP 已启用_禁止修改网关命令

Extjs4.2 window加载HTML,父子页面html传参_extjs中打开网页怎么传参-程序员宅基地

文章浏览阅读482次。Extjs的窗口是可以加载自己的HTML的,但这样两个页面就相当独立了,传参是个问题 ,网上也没有很好的解答清楚,猫猫今天就说清楚这个模式的传参要点。_extjs中打开网页怎么传参

计算机网络复习——Ch3点到点数据链路层_hdlc go-back-n-程序员宅基地

文章浏览阅读1.2k次。Ch3点到点数据链路层知识点1. 点到点数据链路层要解决的主要问题2. 常见的帧管理(帧定界)方法3. CRC的计算4. 流量控制的基本原理5. 常见错误及其处理机制6. 滑动窗口的概念、形式及工作原理7. ARQ(Automatic Repeat reQuest)协议工作原理:8. 连续ARQ(Go-back-N ARQ)工作原理(特别注意累计确认):9. 选择重传ARQ工作原理10. 了解(高..._hdlc go-back-n

推荐文章

热门文章

相关标签