package com.ronakmanglani.watchlist.util; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.ronakmanglani.watchlist.data.MovieColumns; import com.ronakmanglani.watchlist.data.MovieDatabase; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; public class FileUtil { // Constructor private FileUtil() { } // Copy file from source to destination public static void copyFile(File source, File destination) throws IOException { FileInputStream fromFile = new FileInputStream(source); FileOutputStream toFile = new FileOutputStream(destination); FileChannel fromChannel = null; FileChannel toChannel = null; try { fromChannel = fromFile.getChannel(); toChannel = toFile.getChannel(); fromChannel.transferTo(0, fromChannel.size(), toChannel); } finally { try { if (fromChannel != null) { fromChannel.close(); } } finally { if (toChannel != null) { toChannel.close(); } } } } // Function to check if file is a valid database public static boolean isValidDbFile(File db) { try { // Open file as a database SQLiteDatabase sqlDb = SQLiteDatabase.openDatabase(db.getPath(), null, SQLiteDatabase.OPEN_READONLY); // Get cursors for both tables Cursor cursor1 = sqlDb.query(true, MovieDatabase.WATCHED, null, null, null, null, null, null, null); Cursor cursor2 = sqlDb.query(true, MovieDatabase.TO_SEE, null, null, null, null, null, null, null); // Check if "TMDB_ID" column exists (else throw exception) cursor1.getColumnIndexOrThrow(MovieColumns.TMDB_ID); cursor2.getColumnIndexOrThrow(MovieColumns.TMDB_ID); // Close database and cursors sqlDb.close(); cursor1.close(); cursor2.close(); // No exceptions = Valid database return true; } catch (Exception e) { // Exception thrown - Invalid database return false; } } }