Java 在类中打开文件

Java 在类中打开文件,java,android,Java,Android,你好, 我目前的主要活动是安卓系统。这叫做开始活动。 我的程序设计为从web加载XML文件并对其进行解析 现在在将来,我还想添加这样一种功能,即程序加载XML文件,而不是在每次运行时都从SQLLite数据库加载数据 然而,为此,我需要编写一个封装不同功能的接口 在需要使用XML的情况下,我编写了一个小类来涵盖XML加载-但我不能使用openFileInput(…)。。。由于该类不是活动(是否需要是活动??) package com.android.mensa.handledata; 导入java

你好, 我目前的主要活动是安卓系统。这叫做开始活动。 我的程序设计为从web加载XML文件并对其进行解析

现在在将来,我还想添加这样一种功能,即程序加载XML文件,而不是在每次运行时都从SQLLite数据库加载数据

然而,为此,我需要编写一个封装不同功能的接口

在需要使用XML的情况下,我编写了一个小类来涵盖XML加载-但我不能使用openFileInput(…)。。。由于该类不是活动(是否需要是活动??)

package com.android.mensa.handledata;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.TreeMap;
导入javax.xml.parsers.parserConfiguration异常;
导入org.xml.sax.SAXException;
导入android.app.Activity;
导入com.android.mensa.datastructure.午餐地点;
导入com.android.mensa.getData.XMLHandler;
导入com.android.mensa.interfaces.Data;
/**
*此类实现接口数据
*并从实际设备上的XML文件中收集必要的信息。
*/
公共类XMLData实现数据{
@凌驾
public void getMenuforDay(){
//TODO自动生成的方法存根
}
公共树形图公开()
{
文件测试=新文件(“文件”);
文件输入流fis;
TreeMap places=newtreemap();
试一试{
fis=openFileInput(“午餐文件”);
XMLHandler=新的XMLHandler();
places=xmlhandler.parse(fis);
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
捕获(SAXE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(ParserConfiguration异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回地点;
}
}

我想我的问题很基本:XMLhandler助手类(应该返回树映射)是否需要成为一项活动,或者我如何才能实现我的功能?

在我的脑海中,我可以想出两种方法来实现它:

第一个是只使用:

FileInputStream fis = new FileInputStream("lunchfile");
不过,这将从sd卡的根目录中读取文件“午餐文件”,我不完全确定这是否是您想要的,但如果您这样做,我建议您将其更改为“/yourapplication/午餐文件”

另一种方法是将活动传递给reader类

public TreeMap<String, LunchPlace> open(Context activity)
{
        [...]
        fis = activity.openFileInput("lunchfile");
        [...]
}
公共树映射打开(上下文活动)
{
[...]
fis=activity.openFileInput(“午餐文件”);
[...]
}

希望有帮助:)

新文件输入流(“午餐文件”)
不应从SD卡的根目录读取。请使用
Environment.getExternalStorageDirectory()
作为外部存储(通常是SD卡)的根目录,并在
活动
或其他上下文中使用
getfiledir()
来获取车载闪存上的应用程序本地文件。我存储的文件直接存储在手机上。它只是一个很小的XML文件。我刚买了你的书。。。希望我能从他们身上学到很多。@Commonware:对不起,当我发表文章时,我没有访问任何代码的权限,所以我只是从头开始,我检查了自己的代码,然后在那里使用了Environment.getExternalStorageDirectory(),(和getExternalStorageState())。对不起,我只是想确定是否有其他人读过你的答案,他们没有感到困惑。。。
public TreeMap<String, LunchPlace> open(Context activity)
{
        [...]
        fis = activity.openFileInput("lunchfile");
        [...]
}