Android开发常用的Util方法(文件篇)

如果你要封装工具类,注意使用static关键字
有两点放最前面说明一下:

  • 本文大部分方法都涉及SD卡读写,因此注意在manifest文件里设置相关权限。如果你的目标SDK是23(对应Android 6.0)或更高,还要在Java代码里动态申请权限。相关知识可以戳这里
  • Java的一些文件相关方法是有布尔返回值的(比如createNewFile()返回true代表创建成功,false则代表失败),如果不做处理,编译器会发出警告。多数情况下,不处理并不影响功能运转,而且即使严格要求必须处理,也没有太固定的写法——故本文不给出具体处理的代码,请见谅。

其它有错误或者需要补充的欢迎及时指正~~
相关阅读:Android开发常用的Util方法(屏幕UI篇)

创建一个文件夹

public void createDir(String path) {
    File dir = new File(path);
    if (!dir.exists()) {
        dir.mkdirs();
    }
}

调用:createDir(文件夹路径)
说明:例子里没有返回值,可根据需要灵活设定返回值。后面不再详述

创建一个文件

public void createFile(String path) {
    File file = new File(path);
    if (!file.getParentFile().exists()) {
        file.getParentFile().mkdirs();
    }
    if (!file.exists()) {
        file.createNewFile();
    }
}

调用:createDir(文件完整路径)
说明:需要处理或抛出IOException异常

删除文件或文件夹

public void deleteFile(File file) {
    if (file.isFile()) {
        file.delete();
    } else if (file.isDirectory()) {
        //清空文件夹
        File[] files = file.listFiles();
        int length = files.length;
        int index = 0;
        while (length != 0) {
            deleteFile(files[index]);
            index++;
            length--;
        }
        //删除文件夹
        file.delete();
    }
}

调用:deleteFile(要删除的文件或文件夹)
说明:必须清空文件夹后才能删除之,如果只想清空文件夹,可只封装相关一部分内容。另可考虑重载一个参数是文件路径(String类型)的方法

判断是否有SD卡

public boolean sdcardAvailable() {
    String s = Environment.getExternalStorageState(); 
    return s.equals(Environment.MEDIA_MOUNTED);
}

调用:你懂的……
说明:返回true表示有SD卡,false表示无。友情提醒,我们常说的手机运存相当于电脑内存;手机机身内存又称内置SD卡,相当于电脑硬盘;而这里的SD卡指的是外置SD卡,相当于U盘或移动硬盘。

计算文件或文件夹大小

//首先计算出用数字表示的值
public long getFolderSize(File file) {
    long size = 0;
    File[] files = file.listFiles();
    for (File f : files) {
        size += f.isDirectory() ? getFolderSize(f) : f.length();
    }
    return size;
}
//然后将得到的值格式化
public String getFormatSize (double size) {
    double kB = size / 1024;
    if (kB < 1) {
        return size + "B";
    }
    double mB = kB / 1024;
    if (mB < 1) {
        BigDecimal result1 = new BigDecimal(Double.toString(kB));
        //2表示保留两位小数,ROUND_HALF_UP表示四舍五入
        return result1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "KB";
    }
    double gB = mB / 1024;
    if (gB < 1) {
        BigDecimal result2 = new BigDecimal(Double.toString(mB));
        return result2.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "MB";
    }
    double tB = gB / 1024;
    if (tB < 1) {
        BigDecimal result3 = new BigDecimal(Double.toString(gB));
        return result3.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "GB";
    }
    BigDecimal result4 = new BigDecimal(tB);
    return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "TB";
}

调用:getFormatSize(getFolder(文件或文件夹))
说明:这里使用了BigDecimal(大数字精确运算)类,最终返回的格式是诸如”12.34MB”一类的字符串,四舍五入保留两位小数,带单位。可根据实际需要自行调整位数、取舍方式和单位

文件转输入流

public InputStream file2Is(File file) {
    return new FileInputStream(file);
}

调用:file2Is(要转换的文件)
说明:调用完毕记得关流,后面不再详述;另外需要处理或抛出FileNotFoundException异常。附俩方法——

//字符串转输入流
public InputStream String2Is(String s){  
    return new ByteArrayInputStream(s.getBytes());  
}
//输入流转字符串(需要抛出或处理IOException异常)
public String is2String(InputStream is) {
    ByteArrayOutputStream baoS = new ByteArrayOutputStream();
    int i;
    while((i = is.read()) != -1) {
        baoS.write(i);
    }
    return baoS.toString();
}

输入流转文件

public File is2File(InputStream ins, File file) {
    OutputStream os = new FileOutputStream(file);
    int bytesRead;
    //这里设置缓冲区为8K大小,可根据实际情况变更
    byte[] buffer = new byte[8192];
    while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
        os.write(buffer, 0, bytesRead);
    }
    os.close();
    return file;
}

调用:is2File(要转换的输入流, 目标文件)
说明:目标文件一般在方法外预先声明定义。需要处理或抛出IOExceptionFileNotFoundException(它是IOException的子类)异常

Bitmap转文件

public static File bmp2File(Bitmap bmp, File file, Bitmap.CompressFormat format, int quality) {
    FileOutputStream fos = new FileOutputStream(file);
    bmp.compress(format, quality, fos);
    fos.flush();
    fos.close();
    return file;
}

调用:bmp2File(要转换的bmp, 目标文件, 压缩格式, 压缩质量)
说明:参数较多,可根据实际需求重载,主要是压缩格式压缩质量这两个,压缩格式一般是JPEG(也有PNGWEBP可选),压缩质量数字越小压缩度越大(当然质量也越差),一般项目可传7080,传100则代表不压缩。另外此方法需要处理或抛出IOExceptionFileNotFoundException异常。至于文件转Bitmap应该都知道是怎么弄的吧?

    原文作者:彼岸sakura
    原文地址: https://www.jianshu.com/p/cdb4c57eb80d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞