Haven't been touching Android for a very long so I decided to spend a bit of time playing with it. And here's my first tutorial on Android.
SimpleFileIOActivity.java
package zcs.simpleFileIO;
import java.util.Date;
import zcs.utility.io.FileIO;
import zcs.utility.io.FileIOResult;
import android.app.Activity;
import android.os.Bundle;
import android.text.Html;
import android.widget.TextView;
public class SimpleFileIOActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
FileIOResult myFile;
//Create file data.txt
//or you can try "zcs/tester/wonder/try.txt"
//as a file name and it will create the respective
//folders and files
myFile = FileIO.createFile("try.txt");
//Grab the Text View on the layout
TextView tempTxtView = (TextView)this.findViewById(R.id.txtOutput);
String strOutput;
String strToday = "";
Date tempDate = new Date();
//Create a string that has today's date
strToday = tempDate.toString();
if(myFile.get_exist() == 1)
{
//If file exist, get contents of file and display it
strOutput = this.getString(R.string.str_exist);
strOutput = strOutput.replace("{0}",
FileIO.readContentFromFile(myFile.get_file()));
}else if(myFile.get_exist() == 0){
//If file doesn't exist, show a different msg
strOutput = this.getString(R.string.str_create);
}else{
//Error occurred
strOutput = this.getString(R.string.str_error);
}
//Show the text base on the condition of the file.
tempTxtView.setText(Html.fromHtml(strOutput));
//Update the file with the latest date.
if(myFile.get_exist() <= 1)
{
FileIO.writeContentIntoFile(myFile.get_file(), strToday);
}
}
}
FileIO.java <- file that handles all the IO functions
package zcs.utility.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import android.os.Environment;
public class FileIO {
/**
* Function that will create the specified file
* name.
* @param tempPath - path of the file you are
* trying to access
* @return FileIOResult Object
*
*/
public static FileIOResult createFile(String tempPath)
{
FileIOResult tempResult = new FileIOResult();
//Check if the App has access to the External
//Storage first.
boolean mExternalStorageWriteable = false;
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
// We can read and write the media
mExternalStorageWriteable = true;
} else {
// Something else is wrong.
// It may be one of many other states, but all we need
// to know is we can neither read nor write
mExternalStorageWriteable = false;
}
//If we have access to the storage
if(mExternalStorageWriteable)
{
String tempFilePath = tempPath;
if(!tempFilePath.startsWith("/"))
{
tempFilePath = "/" + tempFilePath;
}
File root = Environment.getExternalStorageDirectory();
File tempFile = new File(root + tempPath);
//Check if file exist
if(!tempFile.exists())
{
//split the string and grab all the folders first
String[] strPathArray = tempFilePath.split("/");
//Create all the folders first
String strFolder = "";
for(int i = 0; i < (strPathArray.length - 1); i ++)
{
strFolder = strFolder + "/" + strPathArray[i];
}
File sdDir = new File(root + strFolder);
if(!sdDir.exists()){
sdDir.mkdirs();
}
//Create File Path
tempFile = new File(root + strFolder,
strPathArray[strPathArray.length - 1]);
}
try {
//Check for file existence.
if(tempFile.exists())
{
tempResult.set_exist(1);
}else{
tempResult.set_exist(0);
}
//If file doesn't exist, let's make one.
if(!tempFile.exists())
{
tempFile.createNewFile();
}
} catch (IOException e) {
e.printStackTrace();
}
tempResult.set_file(tempFile);
}else{
tempResult.set_exist(2);
}
return tempResult;
}
/**
*
* Writing contents to the specified file.
* Note: Use createFile(String) to gain access to the
* file first.
* @param tempFile - File you are accessing
* @return contents as a string
*/
public static String readContentFromFile(File tempFile)
{
FileInputStream fis = null;
int ch;
StringBuffer strContent = new StringBuffer("");
try
{
fis = new FileInputStream(tempFile);
while((ch = fis.read()) != -1)
{
strContent.append((char)ch);
}
} catch (Exception e)
{
e.printStackTrace();
} finally
{
try
{
fis.close();
fis = null;
}
catch (IOException e)
{
e.printStackTrace();
}
}
return strContent.toString();
}
/**
* Writing contents to the specified file.
* Note: Use createFile(String) to gain access to the
* file first.
* @param tempFile - File you are accessing
* @param value - value you are going to write
* in the file
*/
public static void writeContentIntoFile(File tempFile, String value)
{
FileOutputStream fos = null;
try
{
fos = new FileOutputStream(tempFile);
fos.write(value.getBytes(),0,value.getBytes().length);
fos.flush();
} catch (Exception e)
{
e.printStackTrace();
} finally
{
try
{
fos.close();
fos = null;
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
FileIOResult.java <- Object that stores the results of the File IO
package zcs.utility.io;
import java.io.File;
public class FileIOResult {
private int _exist = 0;
private File _file = null;
/**
* Used to check for the existance of the file.
* @return one of the below integer (0-2)
*
0 - file does not exist and it will
* be created
*
1 - file exist
*
2 - Error
*/
public int get_exist() {
return _exist;
}
public void set_exist(int _exist) {
this._exist = _exist;
}
public File get_file() {
return _file;
}
public void set_file(File _file) {
this._file = _file;
}
public FileIOResult() {
}
}
AndroidManifest.xml <- Take note of the permissions
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="zcs.simpleFileIO"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".SimpleFileIOActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
| This screen will be shown if file doesn't exist. | This screen will be shown if file exist. |
* Click here for the source files.


No comments:
Post a Comment