将我在一个活动中创建的文件(比如Filewriter.java)设置为可用(用于数据操作)到我的应用程序中的所有其他活动的最佳方法是什么?我确保使用相同的文件名,但我如何确保我到处访问同一个文件?我需要在2个文件上实现它,一个包含字符串名称和其他整数。我使用writeUTF();
创建了字符串文件这里是用于从先前活动(UI)接收数据并将内容写入文件的代码。我想从另一个UI活动中访问这个相同的文件...
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.
}
}
我的主要困境是能够访问SAME一个文件(无论是subject.txt还是classes.bin),并且能够从同一个应用程序中的任何其他活动中读取和操作数据。
答案 0 :(得分:0)
我不确定这里的困境是什么 - 如果你使用相同的文件名,并且可能是相同的路径名,那么根据定义 - 它是相同的文件。
只要你的所有活动都在同一个app / package中,我就不会发现你会遇到任何问题。
所以 - 对两个文件中的每个文件使用相同的完整路径名,您无需担心它们是否是同一个文件。
我建议的是,您可能希望使用openFileOutput("subject.txt", Context.MODE_WORLD_READABLE)
而不是使用openFileOutput(getFilesDir ( ) + "/" + "subject.txt", Context.MODE_WORLD_READABLE)
(它是相对的,而您可能不知道文件的位置),而private String getFileName ( String file ) {
return getFilesDir ( ) + "/" + file;
}
将始终为您提供应用内部存储的私人数据中的完整路径名。
我通常在我的应用中提供帮助方法:
{{1}}
答案 1 :(得分:0)
我建议您使用Application
类,以便在您的所有活动中访问该文件。您可以扩展Application
课程,并在您创建Application
的自定义DataOutputStream
课程中,将其公开或通过getter getOutputStream()
访问。
然后,在您的活动中,您可以执行以下操作来访问OutputStream
:
((MyApplication)getApplication()).getOutputStream().write(...);
完成写入文件后,您还可以在Application
实施方法中声明打开或关闭OutputStream
。