You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
366 lines
26 KiB
366 lines
26 KiB
<html>
|
|
<head>
|
|
<title>BackupUtils.java</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<style type="text/css">
|
|
.s0 { color: #8c8c8c; font-style: italic;}
|
|
.s1 { color: #080808;}
|
|
.s2 { color: #0033b3;}
|
|
.s3 { color: #067d17;}
|
|
.s4 { color: #1750eb;}
|
|
.s5 { color: #8c8c8c; font-style: italic;}
|
|
</style>
|
|
</head>
|
|
<body bgcolor="#ffffff">
|
|
<table CELLSPACING=0 CELLPADDING=5 COLS=1 WIDTH="100%" BGCOLOR="#c0c0c0" >
|
|
<tr><td><center>
|
|
<font face="Arial, Helvetica" color="#000000">
|
|
BackupUtils.java</font>
|
|
</center></td></tr></table>
|
|
<pre><span class="s0">/*
|
|
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/</span>
|
|
|
|
<span class="s2">package </span><span class="s1">net.micode.notes.tool;</span>
|
|
|
|
<span class="s2">import </span><span class="s1">android.content.Context;</span>
|
|
<span class="s2">import </span><span class="s1">android.database.Cursor;</span>
|
|
<span class="s2">import </span><span class="s1">android.os.Environment;</span>
|
|
<span class="s2">import </span><span class="s1">android.text.TextUtils;</span>
|
|
<span class="s2">import </span><span class="s1">android.text.format.DateFormat;</span>
|
|
<span class="s2">import </span><span class="s1">android.util.Log;</span>
|
|
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.R;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.data.Notes;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.data.Notes.DataColumns;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.data.Notes.DataConstants;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.data.Notes.NoteColumns;</span>
|
|
|
|
<span class="s2">import </span><span class="s1">java.io.File;</span>
|
|
<span class="s2">import </span><span class="s1">java.io.FileNotFoundException;</span>
|
|
<span class="s2">import </span><span class="s1">java.io.FileOutputStream;</span>
|
|
<span class="s2">import </span><span class="s1">java.io.IOException;</span>
|
|
<span class="s2">import </span><span class="s1">java.io.PrintStream;</span>
|
|
|
|
|
|
<span class="s2">public class </span><span class="s1">BackupUtils {</span>
|
|
<span class="s2">private static final </span><span class="s1">String TAG = </span><span class="s3">"BackupUtils"</span><span class="s1">;</span>
|
|
<span class="s0">// Singleton stuff</span>
|
|
<span class="s2">private static </span><span class="s1">BackupUtils sInstance;</span>
|
|
|
|
<span class="s2">public static synchronized </span><span class="s1">BackupUtils getInstance(Context context) {</span>
|
|
<span class="s2">if </span><span class="s1">(sInstance == </span><span class="s2">null</span><span class="s1">) {</span>
|
|
<span class="s1">sInstance = </span><span class="s2">new </span><span class="s1">BackupUtils(context);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">return </span><span class="s1">sInstance;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Following states are signs to represents backup or restore</span>
|
|
<span class="s0">* status</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s0">// Currently, the sdcard is not mounted</span>
|
|
<span class="s2">public static final int </span><span class="s1">STATE_SD_CARD_UNMOUONTED = </span><span class="s4">0</span><span class="s1">;</span>
|
|
<span class="s0">// The backup file not exist</span>
|
|
<span class="s2">public static final int </span><span class="s1">STATE_BACKUP_FILE_NOT_EXIST = </span><span class="s4">1</span><span class="s1">;</span>
|
|
<span class="s0">// The data is not well formated, may be changed by other programs</span>
|
|
<span class="s2">public static final int </span><span class="s1">STATE_DATA_DESTROIED = </span><span class="s4">2</span><span class="s1">;</span>
|
|
<span class="s0">// Some run-time exception which causes restore or backup fails</span>
|
|
<span class="s2">public static final int </span><span class="s1">STATE_SYSTEM_ERROR = </span><span class="s4">3</span><span class="s1">;</span>
|
|
<span class="s0">// Backup or restore success</span>
|
|
<span class="s2">public static final int </span><span class="s1">STATE_SUCCESS = </span><span class="s4">4</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private </span><span class="s1">TextExport mTextExport;</span>
|
|
|
|
<span class="s2">private </span><span class="s1">BackupUtils(Context context) {</span>
|
|
<span class="s1">mTextExport = </span><span class="s2">new </span><span class="s1">TextExport(context);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private static boolean </span><span class="s1">externalStorageAvailable() {</span>
|
|
<span class="s2">return </span><span class="s1">Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public int </span><span class="s1">exportToText() {</span>
|
|
<span class="s2">return </span><span class="s1">mTextExport.exportToText();</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public </span><span class="s1">String getExportedTextFileName() {</span>
|
|
<span class="s2">return </span><span class="s1">mTextExport.mFileName;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public </span><span class="s1">String getExportedTextFileDir() {</span>
|
|
<span class="s2">return </span><span class="s1">mTextExport.mFileDirectory;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private static class </span><span class="s1">TextExport {</span>
|
|
<span class="s2">private static final </span><span class="s1">String[] NOTE_PROJECTION = {</span>
|
|
<span class="s1">NoteColumns.ID,</span>
|
|
<span class="s1">NoteColumns.MODIFIED_DATE,</span>
|
|
<span class="s1">NoteColumns.SNIPPET,</span>
|
|
<span class="s1">NoteColumns.TYPE</span>
|
|
<span class="s1">};</span>
|
|
|
|
<span class="s2">private static final int </span><span class="s1">NOTE_COLUMN_ID = </span><span class="s4">0</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private static final int </span><span class="s1">NOTE_COLUMN_MODIFIED_DATE = </span><span class="s4">1</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private static final int </span><span class="s1">NOTE_COLUMN_SNIPPET = </span><span class="s4">2</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private static final </span><span class="s1">String[] DATA_PROJECTION = {</span>
|
|
<span class="s1">DataColumns.CONTENT,</span>
|
|
<span class="s1">DataColumns.MIME_TYPE,</span>
|
|
<span class="s1">DataColumns.DATA1,</span>
|
|
<span class="s1">DataColumns.DATA2,</span>
|
|
<span class="s1">DataColumns.DATA3,</span>
|
|
<span class="s1">DataColumns.DATA4,</span>
|
|
<span class="s1">};</span>
|
|
|
|
<span class="s2">private static final int </span><span class="s1">DATA_COLUMN_CONTENT = </span><span class="s4">0</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private static final int </span><span class="s1">DATA_COLUMN_MIME_TYPE = </span><span class="s4">1</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private static final int </span><span class="s1">DATA_COLUMN_CALL_DATE = </span><span class="s4">2</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private static final int </span><span class="s1">DATA_COLUMN_PHONE_NUMBER = </span><span class="s4">4</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private final </span><span class="s1">String [] TEXT_FORMAT;</span>
|
|
<span class="s2">private static final int </span><span class="s1">FORMAT_FOLDER_NAME = </span><span class="s4">0</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">FORMAT_NOTE_DATE = </span><span class="s4">1</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">FORMAT_NOTE_CONTENT = </span><span class="s4">2</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private </span><span class="s1">Context mContext;</span>
|
|
<span class="s2">private </span><span class="s1">String mFileName;</span>
|
|
<span class="s2">private </span><span class="s1">String mFileDirectory;</span>
|
|
|
|
<span class="s2">public </span><span class="s1">TextExport(Context context) {</span>
|
|
<span class="s1">TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note);</span>
|
|
<span class="s1">mContext = context;</span>
|
|
<span class="s1">mFileName = </span><span class="s3">""</span><span class="s1">;</span>
|
|
<span class="s1">mFileDirectory = </span><span class="s3">""</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private </span><span class="s1">String getFormat(</span><span class="s2">int </span><span class="s1">id) {</span>
|
|
<span class="s2">return </span><span class="s1">TEXT_FORMAT[id];</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Export the folder identified by folder id to text</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">private void </span><span class="s1">exportFolderToText(String folderId, PrintStream ps) {</span>
|
|
<span class="s0">// Query notes belong to this folder</span>
|
|
<span class="s1">Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI,</span>
|
|
<span class="s1">NOTE_PROJECTION, NoteColumns.PARENT_ID + </span><span class="s3">"=?"</span><span class="s1">, </span><span class="s2">new </span><span class="s1">String[] {</span>
|
|
<span class="s1">folderId</span>
|
|
<span class="s1">}, </span><span class="s2">null</span><span class="s1">);</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(notesCursor != </span><span class="s2">null</span><span class="s1">) {</span>
|
|
<span class="s2">if </span><span class="s1">(notesCursor.moveToFirst()) {</span>
|
|
<span class="s2">do </span><span class="s1">{</span>
|
|
<span class="s0">// Print note's last modified date</span>
|
|
<span class="s1">ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format(</span>
|
|
<span class="s1">mContext.getString(R.string.format_datetime_mdhm),</span>
|
|
<span class="s1">notesCursor.getLong(NOTE_COLUMN_MODIFIED_DATE))));</span>
|
|
<span class="s0">// Query data belong to this note</span>
|
|
<span class="s1">String noteId = notesCursor.getString(NOTE_COLUMN_ID);</span>
|
|
<span class="s1">exportNoteToText(noteId, ps);</span>
|
|
<span class="s1">} </span><span class="s2">while </span><span class="s1">(notesCursor.moveToNext());</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">notesCursor.close();</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Export note identified by id to a print stream</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">private void </span><span class="s1">exportNoteToText(String noteId, PrintStream ps) {</span>
|
|
<span class="s1">Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI,</span>
|
|
<span class="s1">DATA_PROJECTION, DataColumns.NOTE_ID + </span><span class="s3">"=?"</span><span class="s1">, </span><span class="s2">new </span><span class="s1">String[] {</span>
|
|
<span class="s1">noteId</span>
|
|
<span class="s1">}, </span><span class="s2">null</span><span class="s1">);</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(dataCursor != </span><span class="s2">null</span><span class="s1">) {</span>
|
|
<span class="s2">if </span><span class="s1">(dataCursor.moveToFirst()) {</span>
|
|
<span class="s2">do </span><span class="s1">{</span>
|
|
<span class="s1">String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE);</span>
|
|
<span class="s2">if </span><span class="s1">(DataConstants.CALL_NOTE.equals(mimeType)) {</span>
|
|
<span class="s0">// Print phone number</span>
|
|
<span class="s1">String phoneNumber = dataCursor.getString(DATA_COLUMN_PHONE_NUMBER);</span>
|
|
<span class="s2">long </span><span class="s1">callDate = dataCursor.getLong(DATA_COLUMN_CALL_DATE);</span>
|
|
<span class="s1">String location = dataCursor.getString(DATA_COLUMN_CONTENT);</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(!TextUtils.isEmpty(phoneNumber)) {</span>
|
|
<span class="s1">ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),</span>
|
|
<span class="s1">phoneNumber));</span>
|
|
<span class="s1">}</span>
|
|
<span class="s0">// Print call date</span>
|
|
<span class="s1">ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat</span>
|
|
<span class="s1">.format(mContext.getString(R.string.format_datetime_mdhm),</span>
|
|
<span class="s1">callDate)));</span>
|
|
<span class="s0">// Print call attachment location</span>
|
|
<span class="s2">if </span><span class="s1">(!TextUtils.isEmpty(location)) {</span>
|
|
<span class="s1">ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),</span>
|
|
<span class="s1">location));</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">} </span><span class="s2">else if </span><span class="s1">(DataConstants.NOTE.equals(mimeType)) {</span>
|
|
<span class="s1">String content = dataCursor.getString(DATA_COLUMN_CONTENT);</span>
|
|
<span class="s2">if </span><span class="s1">(!TextUtils.isEmpty(content)) {</span>
|
|
<span class="s1">ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT),</span>
|
|
<span class="s1">content));</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">} </span><span class="s2">while </span><span class="s1">(dataCursor.moveToNext());</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">dataCursor.close();</span>
|
|
<span class="s1">}</span>
|
|
<span class="s0">// print a line separator between note</span>
|
|
<span class="s2">try </span><span class="s1">{</span>
|
|
<span class="s1">ps.write(</span><span class="s2">new byte</span><span class="s1">[] {</span>
|
|
<span class="s1">Character.LINE_SEPARATOR, Character.LETTER_NUMBER</span>
|
|
<span class="s1">});</span>
|
|
<span class="s1">} </span><span class="s2">catch </span><span class="s1">(IOException e) {</span>
|
|
<span class="s1">Log.e(TAG, e.toString());</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Note will be exported as text which is user readable</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">public int </span><span class="s1">exportToText() {</span>
|
|
<span class="s2">if </span><span class="s1">(!externalStorageAvailable()) {</span>
|
|
<span class="s1">Log.d(TAG, </span><span class="s3">"Media was not mounted"</span><span class="s1">);</span>
|
|
<span class="s2">return </span><span class="s1">STATE_SD_CARD_UNMOUONTED;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">PrintStream ps = getExportToTextPrintStream();</span>
|
|
<span class="s2">if </span><span class="s1">(ps == </span><span class="s2">null</span><span class="s1">) {</span>
|
|
<span class="s1">Log.e(TAG, </span><span class="s3">"get print stream error"</span><span class="s1">);</span>
|
|
<span class="s2">return </span><span class="s1">STATE_SYSTEM_ERROR;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s0">// First export folder and its notes</span>
|
|
<span class="s1">Cursor folderCursor = mContext.getContentResolver().query(</span>
|
|
<span class="s1">Notes.CONTENT_NOTE_URI,</span>
|
|
<span class="s1">NOTE_PROJECTION,</span>
|
|
<span class="s3">"(" </span><span class="s1">+ NoteColumns.TYPE + </span><span class="s3">"=" </span><span class="s1">+ Notes.TYPE_FOLDER + </span><span class="s3">" AND "</span>
|
|
<span class="s1">+ NoteColumns.PARENT_ID + </span><span class="s3">"<>" </span><span class="s1">+ Notes.ID_TRASH_FOLER + </span><span class="s3">") OR "</span>
|
|
<span class="s1">+ NoteColumns.ID + </span><span class="s3">"=" </span><span class="s1">+ Notes.ID_CALL_RECORD_FOLDER, </span><span class="s2">null</span><span class="s1">, </span><span class="s2">null</span><span class="s1">);</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(folderCursor != </span><span class="s2">null</span><span class="s1">) {</span>
|
|
<span class="s2">if </span><span class="s1">(folderCursor.moveToFirst()) {</span>
|
|
<span class="s2">do </span><span class="s1">{</span>
|
|
<span class="s0">// Print folder's name</span>
|
|
<span class="s1">String folderName = </span><span class="s3">""</span><span class="s1">;</span>
|
|
<span class="s2">if</span><span class="s1">(folderCursor.getLong(NOTE_COLUMN_ID) == Notes.ID_CALL_RECORD_FOLDER) {</span>
|
|
<span class="s1">folderName = mContext.getString(R.string.call_record_folder_name);</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s1">folderName = folderCursor.getString(NOTE_COLUMN_SNIPPET);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">if </span><span class="s1">(!TextUtils.isEmpty(folderName)) {</span>
|
|
<span class="s1">ps.println(String.format(getFormat(FORMAT_FOLDER_NAME), folderName));</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">String folderId = folderCursor.getString(NOTE_COLUMN_ID);</span>
|
|
<span class="s1">exportFolderToText(folderId, ps);</span>
|
|
<span class="s1">} </span><span class="s2">while </span><span class="s1">(folderCursor.moveToNext());</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">folderCursor.close();</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">// Export notes in root's folder</span>
|
|
<span class="s1">Cursor noteCursor = mContext.getContentResolver().query(</span>
|
|
<span class="s1">Notes.CONTENT_NOTE_URI,</span>
|
|
<span class="s1">NOTE_PROJECTION,</span>
|
|
<span class="s1">NoteColumns.TYPE + </span><span class="s3">"=" </span><span class="s1">+ +Notes.TYPE_NOTE + </span><span class="s3">" AND " </span><span class="s1">+ NoteColumns.PARENT_ID</span>
|
|
<span class="s1">+ </span><span class="s3">"=0"</span><span class="s1">, </span><span class="s2">null</span><span class="s1">, </span><span class="s2">null</span><span class="s1">);</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(noteCursor != </span><span class="s2">null</span><span class="s1">) {</span>
|
|
<span class="s2">if </span><span class="s1">(noteCursor.moveToFirst()) {</span>
|
|
<span class="s2">do </span><span class="s1">{</span>
|
|
<span class="s1">ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format(</span>
|
|
<span class="s1">mContext.getString(R.string.format_datetime_mdhm),</span>
|
|
<span class="s1">noteCursor.getLong(NOTE_COLUMN_MODIFIED_DATE))));</span>
|
|
<span class="s0">// Query data belong to this note</span>
|
|
<span class="s1">String noteId = noteCursor.getString(NOTE_COLUMN_ID);</span>
|
|
<span class="s1">exportNoteToText(noteId, ps);</span>
|
|
<span class="s1">} </span><span class="s2">while </span><span class="s1">(noteCursor.moveToNext());</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">noteCursor.close();</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">ps.close();</span>
|
|
|
|
<span class="s2">return </span><span class="s1">STATE_SUCCESS;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Get a print stream pointed to the file {</span><span class="s5">@generateExportedTextFile</span><span class="s0">}</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">private </span><span class="s1">PrintStream getExportToTextPrintStream() {</span>
|
|
<span class="s1">File file = generateFileMountedOnSDcard(mContext, R.string.file_path,</span>
|
|
<span class="s1">R.string.file_name_txt_format);</span>
|
|
<span class="s2">if </span><span class="s1">(file == </span><span class="s2">null</span><span class="s1">) {</span>
|
|
<span class="s1">Log.e(TAG, </span><span class="s3">"create file to exported failed"</span><span class="s1">);</span>
|
|
<span class="s2">return null</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mFileName = file.getName();</span>
|
|
<span class="s1">mFileDirectory = mContext.getString(R.string.file_path);</span>
|
|
<span class="s1">PrintStream ps = </span><span class="s2">null</span><span class="s1">;</span>
|
|
<span class="s2">try </span><span class="s1">{</span>
|
|
<span class="s1">FileOutputStream fos = </span><span class="s2">new </span><span class="s1">FileOutputStream(file);</span>
|
|
<span class="s1">ps = </span><span class="s2">new </span><span class="s1">PrintStream(fos);</span>
|
|
<span class="s1">} </span><span class="s2">catch </span><span class="s1">(FileNotFoundException e) {</span>
|
|
<span class="s1">e.printStackTrace();</span>
|
|
<span class="s2">return null</span><span class="s1">;</span>
|
|
<span class="s1">} </span><span class="s2">catch </span><span class="s1">(NullPointerException e) {</span>
|
|
<span class="s1">e.printStackTrace();</span>
|
|
<span class="s2">return null</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">return </span><span class="s1">ps;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Generate the text file to store imported data</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">private static </span><span class="s1">File generateFileMountedOnSDcard(Context context, </span><span class="s2">int </span><span class="s1">filePathResId, </span><span class="s2">int </span><span class="s1">fileNameFormatResId) {</span>
|
|
<span class="s1">StringBuilder sb = </span><span class="s2">new </span><span class="s1">StringBuilder();</span>
|
|
<span class="s1">sb.append(Environment.getExternalStorageDirectory());</span>
|
|
<span class="s1">sb.append(context.getString(filePathResId));</span>
|
|
<span class="s1">File filedir = </span><span class="s2">new </span><span class="s1">File(sb.toString());</span>
|
|
<span class="s1">sb.append(context.getString(</span>
|
|
<span class="s1">fileNameFormatResId,</span>
|
|
<span class="s1">DateFormat.format(context.getString(R.string.format_date_ymd),</span>
|
|
<span class="s1">System.currentTimeMillis())));</span>
|
|
<span class="s1">File file = </span><span class="s2">new </span><span class="s1">File(sb.toString());</span>
|
|
|
|
<span class="s2">try </span><span class="s1">{</span>
|
|
<span class="s2">if </span><span class="s1">(!filedir.exists()) {</span>
|
|
<span class="s1">filedir.mkdir();</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">if </span><span class="s1">(!file.exists()) {</span>
|
|
<span class="s1">file.createNewFile();</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">return </span><span class="s1">file;</span>
|
|
<span class="s1">} </span><span class="s2">catch </span><span class="s1">(SecurityException e) {</span>
|
|
<span class="s1">e.printStackTrace();</span>
|
|
<span class="s1">} </span><span class="s2">catch </span><span class="s1">(IOException e) {</span>
|
|
<span class="s1">e.printStackTrace();</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">return null</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
|
|
|
|
</pre>
|
|
</body>
|
|
</html> |