在类中打开文件

时间:2010-11-06 11:43:57

标签: java android

你好 我目前在Android上有我的主要活动。它被称为开始活动。 我的程序设计是为了从Web加载XML文件并解析它。

现在将来我想要添加程序加载XML文件的能力,而不是每次运行时解析它从SQLLite数据库加载数据。

然而,为此,我需要编写一个封装不同功能的界面。

如果需要使用XML,我给我写了一个小类,它应该涵盖XML加载 - 但我不能使用openFileInput(...)...因为该类不是一个活动(它是否需要是一个??)。

package com.android.mensa.handledata;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.TreeMap;

import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.SAXException;

import android.app.Activity;

import com.android.mensa.datastructure.LunchPlace;
import com.android.mensa.getData.XMLHandler;
import com.android.mensa.interfaces.Data;

/**
 * This class implements the interface Data
 * and gathers the necessary informations out of the XML File on the actual device.
 */
public class XMLData implements Data{

    @Override
    public void getMenuforDay() {
        // TODO Auto-generated method stub

    }

    public TreeMap<String, LunchPlace> open()
    {
        File test = new File("lunchfile");
        FileInputStream fis;
        TreeMap<String, LunchPlace> places = new TreeMap<String, LunchPlace>();
        try {
            fis = openFileInput("lunchfile");
            XMLHandler xmlhandler = new XMLHandler();
            places  = xmlhandler.parse(fis);            
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return places;
    }
}

我想我的问题非常基本:XMLhandler助手类(应该返回TreeMap)需要是一个活动还是我还能如何实现我的功能?

1 个答案:

答案 0 :(得分:1)

在我的头脑中,我可以想到两种方法:

第一个是使用:

FileInputStream fis = new FileInputStream("lunchfile");

然而,这将从SD卡的根目录读取“午餐文件”文件,我并不确定这是否是您想要的,但如果您这样做,我建议更改它“/ yourapplication /午餐文件“而不是。

另一种方法是将活动传递给读者类。

public TreeMap<String, LunchPlace> open(Context activity)
{
        [...]
        fis = activity.openFileInput("lunchfile");
        [...]
}

希望有所帮助:)