将/ assets中的zip文件复制到SD卡

时间:2016-03-19 15:27:53

标签: android osmdroid

我的资源文件夹中有一个.zip文件,我想将1-1复制到我设备上的文件夹中的.zip文件夹中。

它有点工作,但输出zip也包含我不理解的东西。

我有什么:

输入:

  

资产:    Map.mp3

输出:

  

Map.zip

     
    

assets + META-INF + org + res + AndroidManifest.xml + classes.dex + resources.arsc(所有APK文件)

  

而在Map.zip/assets中有一个带有初始内容的Map.mp3。但我只需要更改文件扩展名的1-1副本。

我的代码:

//taken from: http://stackoverflow.com/questions/4447477/android-how-to-copy-files-from-assets-folder-to-sdcard
        AssetManager assetManager = getAssets();
        AssetFileDescriptor assetFileDescriptor = null;

        try
        {
            assetFileDescriptor = assetManager.openFd("Map.mp3");
            // Create new file to copy into.
            File output= new File(_FILEPATH_ + java.io.File.separator + "Map.zip");
            output.createNewFile();
            copyFdToFile(assetFileDescriptor.getFileDescriptor(), output);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }


public static void copyFdToFile(FileDescriptor src, File dst) throws IOException {
    FileChannel inChannel = new FileInputStream(src).getChannel();
    FileChannel outChannel = new FileOutputStream(dst).getChannel();
    try {
        inChannel.transferTo(0, inChannel.size(), outChannel);
    } finally {
        if (inChannel != null)
            inChannel.close();
        if (outChannel != null)
            outChannel.close();
    }
}

_FILEPATH_ = Environment.getExternalStorageDirectory()getAbsolutePath()+" / osmdroid"

1 个答案:

答案 0 :(得分:0)

您始终可以使用简单的文件复制程序:

private void copyFile(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    int read;
    while((read = in.read(buffer)) != -1){
      out.write(buffer, 0, read);
    }
}

使用FileDescriptor的方法无法使用压缩文件。 据我了解,您可以从that answer获得此类解决方案。 以下评论,

  

我的解决方案是将扩展名更改为.mp3,然后将其删除一次   复制

建议将扩展名重命名为.mp3的日期为12月19日12:07。 Google可能会更改FileDescriptor使用情况,并通过重命名来关闭该节目。

我在Android项目中使用简单的程序,一切正常,没有性能问题。