What is the best way to make a file i’ve created in one activity (say Filewriter.java) to be available(for data manipulation) to all other activities in my app? I’ve made sure to use the same filename but how do i ensure that i’m accessing the one same file everywhere? I need to implement this on 2 files, one containing string names and the other integers. I’ve created the string file using writeUTF();
here is the code for receiving data from a previous activity(the UI) and writing the contents to the file. I want to access this same file from another UI activity…
package com.shuaib669.bunkrecord;
import java.io.DataOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
public class filewriter extends Activity{
String[] newText = new String[7];
String[] newNum = new String[7];
int[] no_of_classes = new int[7];
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Bundle extras = getIntent().getExtras();
newText = extras.getStringArray("com.shuaib669.bunkrecord.thetext");
newNum = extras.getStringArray("com.shuaib669.bunkrecord.thenum");
finish();
if (newText != null && newNum != null){
try {
// open subject.txt and classes.bin for writing
DataOutputStream out1 = new DataOutputStream(openFileOutput("subject.txt", Context.MODE_WORLD_READABLE));
DataOutputStream out2 = new DataOutputStream(openFileOutput("classses.bin", Context.MODE_WORLD_READABLE));
for(int x=0;x<7;x++){
try{
//converting string representation of no.s into integers
no_of_classes[x]=Integer.parseInt(newNum[x]);
}
catch(Exception e){
e.printStackTrace();
}
}
for(int x=0;x<7;x++){
if(newText[x]==null)
out1.writeUTF("\n");
else if(newText[x]==" " || newText[x]=="\n" || newText[x]=="\t")
out1.writeUTF("\n");
else
out1.writeUTF(newText[x]);
if(newNum[x]==null)
out2.writeInt((Integer) null);
else
out2.writeInt(no_of_classes[x]);
}
out1.close();
}
catch(IOException e){
Log.e("Data Input Sample", "I/O Error");
}
}
startNextMatchingActivity(new Intent("com.shuaib669.bunkrecord.SUBLIST"));
//Sublist being the activity that displays the stored contents of the file and lets user manipulate the file classes.bin.
}
}
My main dilemma is to be able to access the SAME one file (whether subject.txt or classes.bin) and to be able to read and manipulate the data from any other activity in the same app.
I’m not sure what the dilemma is here – if you’re using the same filename, and presumably the same pathname, then by definition – it’s the same file.
So long as all your activities are in the same app/package, then I don’t see that you would have any problems.
So – use the same full pathname for each of the two files, and you needn’t worry about whether they are the same file.
What I would recommend is, instead of using
openFileOutput("subject.txt", Context.MODE_WORLD_READABLE)(which is relative, and you may not know where the file is), you probably want to useopenFileOutput(getFilesDir ( ) + "/" + "subject.txt", Context.MODE_WORLD_READABLE)which will always provide you with a full pathname within your app’s private data on internal storage.I usually provide a helper method in my apps: