如何读取Android资产中的文件

时间:2014-11-08 23:17:05

标签: java android eclipse exception adt

我遇到Android问题。我想打开文件,检查它,然后返回一个简单的值。

public void setMessageCode(String code){
        try {
            messageCode = setMsg(code);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public String setMsg(String messageCode) throws IOException{
        String FILE = "src/dialogs.txt", msg;
        BufferedReader in = new BufferedReader(new FileReader(FILE)); //IO Exception here
        msg = in.readLine();
        while(msg!=null){
            message = msg.split(",");
            for(int i=0; i<message.length; i++)
                if(message[i].equals(messageCode)){
                    in.close();
                    return message[i++];
                }
            msg = in.readLine();
        }
        in.close();
        return "Nothing to get";
    }

所以Eclipse没有看到问题并且工作完美。 ADT失败了。 Dialogs.txt在src / ...中,我检查了这个数百万次。怎么办?

3 个答案:

答案 0 :(得分:1)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            String first_line = read_file("dialogs.txt");
            System.out.print(first_line);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


    public String read_file(String filename) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                getAssets().open(filename)));

        int i=0;
        String line = reader.readLine();
        while (line != null) {
            if(++i==1)
                return line;//only read the first line
            line = reader.readLine();
        }

        reader.close();
        return "Nothing to get";
    }

}

答案 1 :(得分:0)

您可以在运行项目时打开文件系统窗体&gt;查看并导航到安装路径以查看是否有该文件。

如果您想从中读取文件而不需要更改它,请使用资产。你想要写入你的文件,然后你需要将它保存在你的设备上,它还要求你拥有适当的权限,可以在你的SD卡手机上读写。

在使用之前,请检查您的设备上是否存在该文件。

答案 2 :(得分:0)

好。我处理了这个问题。我通过使用getAssets(“fileName”)从活动传递文件的本地化,而不是在我的类中使用它在InputStreamReader中。现在它看起来像这样。

public void setMessageCode(InputStream location, String code){
    try {
        messagee = setMsg(location, code);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public String setMsg(InputStream location, String messageCode) throws IOException{
    String FILE = "assets/a.txt", msg;
    BufferedReader in = new BufferedReader(new InputStreamReader(location));
    msg = in.readLine();
    while(msg!=null){
        message = msg.split(",");
        for(int i=0; i<message.length; i++)
            if(message[i].equals(messageCode)){
                in.close();
                return message[i+1];
            }
        msg = in.readLine();
    }
    in.close();
    return "Nothing to get";
}