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

如何将应用程序的apk写入文件夹

贲俊才
2023-03-14

我正在尝试获取一个应用程序的APK,并将其保存在存储目录的文件夹中。我已经得到了apk,但我无法将它保存到我想要的文件夹中。

下面是我如何生成apk文件:

    final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    List<ResolveInfo> apps = getPackageManager().queryIntentActivities(mainIntent, 0);

    for (ResolveInfo info : apps) {
            File fileToSave = new File(info.activityInfo.applicationInfo.publicSourceDir)
    }
private void createDirectoryAndSaveFile(File fileToSave) {
        try {
            String folderName = "MyCreatedFolder";

            File folder = new File(Environment.getExternalStorageDirectory() +
                    File.separator + folderName);
            boolean success = true;
            if (!folder.exists()) {
                success = folder.mkdirs();
            }
            if (success) {
                File path = new File(context.getFilesDir(), folderName);
                File mypath = new File(path, fileToSave.getName());
                new BufferedWriter(new FileWriter(mypath));
                Toast.makeText(context, "Created", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(context, "Failed", Toast.LENGTH_LONG).show();
            }
        } catch (Exception e) {
            System.out.println("----" + e.getLocalizedMessage());
        }
    }

fileToSave是APK文件,但写它时没有这样的文件或目录。

java.io.FileNotFoundException:..../MyCreatedFolder/base.apk:open失败:ENOENT(没有这样的文件或目录)

所有所需的权限都已具备,而不需要运行时权限,因为TargetSDK是21。

共有1个答案

平和雅
2023-03-14

尝试此代码,因为您想创建一个文件夹(如果它不存在),然后写入您创建/指定的相同文件夹,因此省略了这一行File path=new File(context.getFilesDir(),folderName);,而是我们创建的文件夹的路径。

private void createDirectoryAndSaveFile(File fileToSave) {
    try {
        String folderName = "MyCreatedFolder";
        String dire = Environment.getExternalStorageDirectory().toString();
        File dir = new File(dire +"/"+ folderName);
        boolean success = true;
        if (!dir.exists()) {
            success=dir.mkdirs();
        }

        if (success) {
            File mypath = new File(dir + "/"+folderName+"/", fileToSave.getName());               
            new BufferedWriter(new FileWriter(mypath));
            Toast.makeText(context, "Created", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(context, "Failed", Toast.LENGTH_LONG).show();
        }
    } catch (Exception e) {
        System.out.println("----" + e.getLocalizedMessage());
    }
}
 类似资料:
  • 问题内容: 我的Xcode项目中有一个XML文件,我试图首先将其保存到磁盘,其次我如何知道是否已成功保存它?这是正确的方法吗?使用模拟器,我导航到iOS 11中新的“文件”文件夹,但没有看到它,但不确定是否应该存在该文件夹? 更新以包括文件是否存在我的检查: 问题答案: 您可以使用并让用户在共享URL时选择他想保存文件的位置。用户只需要选择保存到文件,然后选择要保存要导出文件的目录即可。 您可以用

  • 我们目前正在将几个Grails(2.4.4)应用程序部署到一个Tomcat7服务器上,并且已经完全按照这里所描述的tomcat-SLF4j-logback配置了日志记录。 我们希望通过一个logback.xml文件配置所有grails应用程序,并将所有应用程序记录到一个文件中,但按照grails的application.properties中定义的应用程序名称区分日志消息: 我们的logback.

  • 这是我的简单测试用例: 正因为如此: 点击后,我会更改,所以我想在这里访问我的属性,以检查是否真的发生了更改。 我注意到有一件奇怪的事情,当我构建我的应用程序并检查构建的内容时,我的UITest目标没有构建。这很重要吗?

  • 我已经在Visual Studio2019 for windows中用C#构建了一个WPF应用程序,但现在我想创建一个APK。有人能帮忙吗?

  • 我有一个应用程序,它试图将字符串序列化为资产目录下的文本文件。写入操作不会引发任何异常,尽管写入操作后文件为空(这意味着写入操作没有成功)。 我的问题是为什么不能写入文件。