代码之家  ›  专栏  ›  技术社区  ›  stackoverflow

以编程方式将/system/app/*.apk复制到sdcard

  •  2
  • stackoverflow  · 技术社区  · 11 年前

    我有一个apk的路径“/system/app/Gallery2.apk”,我想把它复制到SD卡上。我实现复制方法

     public void copy(File src, File dst) throws IOException {
        InputStream in = new FileInputStream(src);
        OutputStream out = new FileOutputStream(dst);
    
        // Transfer bytes from in to out
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
    }
    

    但它显示IOException

    我传递值

     try {
                        File file =new File( pm.getApplicationInfo(TAG_PACKAGE.get(position),PackageManager.GET_META_DATA).publicSourceDir);
    
                        Toast.makeText(MainActivity.this , pm.getApplicationInfo(TAG_PACKAGE.get(position),PackageManager.GET_META_DATA).publicSourceDir, Toast.LENGTH_LONG).show();
    
                    try {
                        File dir = new File(Environment.getExternalStorageDirectory() + "/foldername/");
                         if(!dir.exists())
                            {
                                if(dir.mkdir()) ;//directory is created;
                                Toast.makeText(MainActivity.this ,dir.toString(), Toast.LENGTH_LONG).show();
    
                            }
    
                         copy(file.getAbsoluteFile(), dir);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    } catch (NameNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
    

    例外情况:

      exception java.io.FileNotFoundException: /storage/sdcard0/folder: open failed: EISDIR (Is a directory)
    

    它不起作用,thnks

    1 回复  |  直到 11 年前
        1
  •  1
  •   Dalmas    11 年前

    看起来您正试图将文件复制到文件夹中,但没有指定目标文件名。

    我想您想将文件名附加到目标路径:

    copy(file.getAbsoluteFile(), new File(dir, file.getName()));