当前位置: 首页 > 知识库问答 >
问题:

文件从raw复制到外部(辅助)SD卡

东方旭东
2023-03-14

我知道很多问题已经被回答了,但是在我的例子中,我的代码在Oppo、三星手机上运行正常,但是在MI、MOto G、Lenavo手机上不能运行

下面是我的代码:

public static String getExternalStorage() {
        File rootFolder = new File("/");
        boolean isSdcardRemovable = false;
        String path = null;
     /* loop: */
     for (int i = 0; i < rootFolder.listFiles().length; i++) {

        if (rootFolder.listFiles()[i].listFiles() != null
                && !rootFolder.listFiles()[i].toString().contains("system")
                && !rootFolder.listFiles()[i].toString().contains("etc")
                && !rootFolder.listFiles()[i].toString().contains("dev")) {

            File dataDir = new File(Environment.getDataDirectory()
                    .getAbsolutePath());

            long dataDirSize = dataDir.getFreeSpace() / (1000 * 1000);
            long folderSize = rootFolder.listFiles()[i].getFreeSpace()
                    / (1000 * 1000);

            if (dataDirSize == folderSize
                    || (dataDirSize > folderSize && folderSize > (dataDirSize - 80))) {
                System.err
                        .println("INTERNAL1 " + rootFolder.listFiles()[i]);
                System.err.println(dataDirSize);
                System.err.println(folderSize);
            } else {

                File rootSubFolder1 = new File(
                        rootFolder.listFiles()[i].getAbsolutePath());

                if (rootSubFolder1.listFiles() != null) {

                    for (int j = 0; j < rootSubFolder1.listFiles().length; j++) {

                        if (rootSubFolder1.listFiles()[j].getTotalSpace() != 0
                                && rootSubFolder1.listFiles()[j]
                                        .getFreeSpace() != 0
                                && rootSubFolder1.listFiles()[j]
                                        .listFiles() != null) {

                            Debug.i("fromGetExternalStorage", ""
                                    + rootSubFolder1.listFiles()[j]);

                            if (rootSubFolder1.listFiles()[j].toString()
                                    .contains("sdcard")
                                    || rootSubFolder1.listFiles()[j]
                                            .toString().contains("storage")
                                    || rootSubFolder1.listFiles()[j]
                                            .toString().contains("mnt")) {

                                folderSize = rootSubFolder1.listFiles()[j]
                                        .getFreeSpace() / (1000 * 1000);

                                if (dataDirSize == folderSize
                                        || (dataDirSize > folderSize && folderSize > (dataDirSize - 80))) {
                                    System.err
                                            .println("INTERNAL2 "
                                                    + rootSubFolder1
                                                            .listFiles()[j]);
                                    System.err.println(dataDirSize);
                                    System.err.println(folderSize);
                                } else {
                                    int pos = rootSubFolder1.listFiles()[j]
                                            .getAbsolutePath().lastIndexOf(
                                                    '/');
                                    String str = rootSubFolder1.listFiles()[j]
                                            .getAbsolutePath().substring(
                                                    pos + 1);

                                    if (str.matches("(sd|ext|3039|m_external_sd).*")) {

                                        isSdcardRemovable = true;
                                        System.err.println("EXTERNAL "
                                                + rootSubFolder1
                                                        .listFiles()[j]);
                                        System.err.println(dataDirSize);
                                        System.err.println(folderSize);
                                        path = rootSubFolder1.listFiles()[j]
                                                .getAbsolutePath() + "/";
                                        break loop;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    if (isSdcardRemovable) {
        if (path != null) {
            Debug.i("new Path from getExternal Storage", path);
        } else {
            Debug.i("fail", "External memory not found.");
        }
    } else {
        Debug.i("fail", "External memory not available.");

    }

    return path;
}` 

共有1个答案

益光亮
2023-03-14

首先制作目录

 File wallpaperDirectory = new File("sdcard/Youpath/");
 // have the object build the directory structure, if needed.
        if(!wallpaperDirectory.exists()) {
            wallpaperDirectory.mkdirs();
        }

要复制的代码

final int[] mList= new int[] { R.raw.a, R.raw.b, R.raw.c,R.raw.d,R.raw.e,R.raw.f,
                R.raw.g,R.raw.h,R.raw.i,R.raw.j,R.raw.k,R.raw.l,R.raw.m,R.raw.n,R.raw.o,R.raw.p,R.raw.q
        ,R.raw.r,R.raw.s,R.raw.t,R.raw.u};
        for (int i = 0; i < mList.length; i++) {
            try {
                String path = "sdcard/Youpath/";
                File dir = new File(path);
                if (dir.mkdirs() || dir.isDirectory()) {
                    String mName= "YourSetName"+ String.valueOf(i+1) + ".extension";
                    CopyRAWtoSDCard(mList[i], path + File.separator + mName);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

CopyRAWtoSDCard函数

   private void CopyRAWtoSDCard(int id, String path) throws IOException {
    InputStream in = getResources().openRawResource(id);
    FileOutputStream out = new FileOutputStream(path);
    byte[] buff = new byte[1024];
    int read = 0;
    try {
        while ((read = in.read(buff)) > 0) {
            out.write(buff, 0, read);
        }
    } finally {
        in.close();
        out.close();
    }
}
 类似资料:
  • 问题内容: 我希望能够从Android设备的内部缓存中移动或复制文件,并将其放入SD卡上的永久存储区。这是我到目前为止所拥有的: 问题答案:

  • 本文向大家介绍Android复制assets文件到SD卡,包括了Android复制assets文件到SD卡的使用技巧和注意事项,需要的朋友参考一下 前言 最近接到一个js文件缓存任务,即通过拦截我们webView的url,首先从文件加载js文件,文件里没有的话就去assets里面Copy过来。感觉这个工具类挺有用的,所以先发上来供大家参考。稍后有时间会把整个项目思路写出来。 项目代码 参数说明 项

  • 我试图使用Adobe reader读取从服务器下载的pdf文件,但问题是当我将其存储在内部存储时,其他应用程序无法读取该文件。现在我想知道如何将此文件复制到外部存储(/sdcard/)中,以便pdf查看器可以查看。 由于安全原因,我将文件存储在内部存储,然后删除外部存储的文件。 我的问题是如何复制保存在内部存储中的文件,而不使用raw或将其放入InputStream中的资产。

  • 本文向大家介绍Android实现复制Assets文件到SD卡,包括了Android实现复制Assets文件到SD卡的使用技巧和注意事项,需要的朋友参考一下 Assets文件介绍 assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。 1. 先在Activity里面调用getAssets() 来获取AssetManager引用。 2. 再用Asse

  • 如何使用从辅助外部存储器提供文件? 的当前实现只处理 看来,没有办法定义一个

  • 问题内容: 假设我的jar包“ com.test.io”中有一个名为test.txt的文件。 我将如何编写一个类来检索此文本文件,然后将内容复制到文件系统上的新文件中? 问题答案: 假设jar在您的类路径中: