MuntashirAkon/AppManager · error · BackupException

Could not get data files

Error message

Could not get data files

What it means

Thrown by SBConverter.backupData when opening the source data zip files (internal data, external data, or OBB) throws FileNotFoundException. Only the files matching the enabled backup flags are opened, so the error names whichever data zip was requested but does not exist.

Solutions

  1. Disable flags in destination metadata for data types that don't exist in the source (backupExternalData / backupMediaObb / backupInternalData as applicable).
  2. Verify the source Swift Backup folder actually contains the data zip files expected by getIntDataFile/getExtDataFile/getObbFile.
  3. Re-export or re-copy the original Swift Backup archive if files are missing.
  4. Inspect the FileNotFoundException message to learn which specific data file path was missing.

Example fix

// before: enable all data flags unconditionally
metadata.info.flags.backupExternalData = true;
// after: enable only when the source archive exists
metadata.info.flags.backupExternalData =
    new File(sourceDir, "ext_data.zip").isFile();
Defensive patterns

Strategy: validation

Validate before calling

if (flags.backupInternalData && !new File(sourceDir, "data.zip").isFile())
    flags.backupInternalData = false;
if (flags.backupExternalData && !new File(sourceDir, "ext_data.zip").isFile())
    flags.backupExternalData = false;
if (flags.backupMediaObb && !new File(sourceDir, "obb.zip").isFile())
    flags.backupMediaObb = false;

Try / catch

try { converter.convert(); }
catch (BackupException e) {
    if (e.getCause() instanceof FileNotFoundException) {
        // disable the missing data flag and retry
    }
}

Prevention

When it happens

Trigger: convert() with backupInternalData/backupExternalData/backupMediaObb flags set while the corresponding Swift Backup source zip (app data, external data, or OBB archive) is absent from the source folder; a data-only conversion of a source that never had data backed up.

Common situations: User enabled 'backup external data' for a converted backup whose original Swift Backup only captured internal data; source folder trimmed or partially restored; OBB archive missing because the app has no OBB files but the flag was enabled anyway.

Understand the failure class

Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.

Related errors


AI-assisted analysis of MuntashirAkon/AppManager@0152f468fc (2026-09-12). Data as JSON: /api/errors/2dfbee0a7c16aec7. Report an issue: GitHub.

Appendix: source

Thrown at app/src/main/java/io/github/muntashirakon/AppManager/backup/convert/SBConverter.java:214

        for (Path file : sourceFiles) {
            mChecksum.add(file.getName(), DigestUtils.getHexDigest(mDestMetadata.info.checksumAlgo, file));
        }
    }

    private void backupData() throws BackupException {
        List<Path> dataFiles = new ArrayList<>(3);
        try {
            if (mDestMetadata.info.flags.backupInternalData()) {
                dataFiles.add(getIntDataFile());
            }
            if (mDestMetadata.info.flags.backupExternalData()) {
                dataFiles.add(getExtDataFile());
            }
            if (mDestMetadata.info.flags.backupMediaObb()) {
                dataFiles.add(getObbFile());
            }
        } catch (FileNotFoundException e) {
            throw new BackupException("Could not get data files", e);
        }
        String tarType = mDestMetadata.info.tarType;
        int i = 0;
        for (Path dataFile : dataFiles) {
            String dataBackupFilePrefix = BackupUtils.getDataFilePrefix(i++, getExt(tarType));
            try (ZipInputStream zis = new ZipInputStream(new BufferedInputStream(dataFile.openInputStream()));
                 SplitOutputStream sos = new SplitOutputStream(mBackupItem.getUnencryptedBackupPath(), dataBackupFilePrefix, DEFAULT_SPLIT_SIZE);
                 BufferedOutputStream bos = new BufferedOutputStream(sos);
                 OutputStream os = TarUtils.createCompressedStream(bos, tarType)) {
                // TODO: 31/5/21 Check backup format (each zip file has a comment section which can be parsed as JSON)
                try (TarArchiveOutputStream tos = new TarArchiveOutputStream(os)) {
                    tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX);
                    tos.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_POSIX);
                    ZipEntry zipEntry;
                    while ((zipEntry = zis.getNextEntry()) != null) {
                        File tmpFile = null;
                        if (!zipEntry.isDirectory()) {
                            // We need to use a temporary file

View on GitHub (pinned to 0152f468fc)