| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package org.chromium.base; |
| |
| import android.content.Context; |
| |
| import java.io.BufferedOutputStream; |
| import java.io.File; |
| import java.io.FileOutputStream; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.io.OutputStream; |
| |
| /** |
| * Helper methods for dealing with Files. |
| */ |
| public class FileUtils { |
| private static final String TAG = "FileUtils"; |
| |
| /** |
| * Delete the given File and (if it's a directory) everything within it. |
| */ |
| public static void recursivelyDeleteFile(File currentFile) { |
| assert !ThreadUtils.runningOnUiThread(); |
| if (currentFile.isDirectory()) { |
| File[] files = currentFile.listFiles(); |
| if (files != null) { |
| for (File file : files) { |
| recursivelyDeleteFile(file); |
| } |
| } |
| } |
| |
| if (!currentFile.delete()) Log.e(TAG, "Failed to delete: " + currentFile); |
| } |
| |
| /** |
| * Extracts an asset from the app's APK to a file. |
| * @param context |
| * @param assetName Name of the asset to extract. |
| * @param dest File to extract the asset to. |
| * @return true on success. |
| */ |
| public static boolean extractAsset(Context context, String assetName, File dest) { |
| InputStream inputStream = null; |
| OutputStream outputStream = null; |
| try { |
| inputStream = context.getAssets().open(assetName); |
| outputStream = new BufferedOutputStream(new FileOutputStream(dest)); |
| byte[] buffer = new byte[8192]; |
| int c; |
| while ((c = inputStream.read(buffer)) != -1) { |
| outputStream.write(buffer, 0, c); |
| } |
| inputStream.close(); |
| outputStream.close(); |
| return true; |
| } catch (IOException e) { |
| if (inputStream != null) { |
| try { |
| inputStream.close(); |
| } catch (IOException ex) { |
| } |
| } |
| if (outputStream != null) { |
| try { |
| outputStream.close(); |
| } catch (IOException ex) { |
| } |
| } |
| } |
| return false; |
| } |
| } |