安卓获取资产文件路径的方法

25

我正在进行以下操作:

FileReader fin = new FileReader("file:///android_asset/myFile.txt");

在一个Android项目中,有很多变量。运行时我会收到文件未找到的异常。该文件存在并且在资源文件夹中是正确的,因此我的路径可能是错误的。

这里我需要什么绝对路径?


2
你有没有考虑到文件名是大小写敏感的这个事实? - Sarwar Erfan
6个回答

47
AssetFileDescriptor descriptor = getAssets().openFd("myfile.txt");
FileReader reader = new FileReader(descriptor.getFileDescriptor());

尝试使用上面的方法与FileDescriptors一起使用。这似乎是我发现的最可靠的收集资产路径的方式。


5
@kcoppock:这里Dalvik抱怨“FileNotFoundException”,表示文件可能已经被压缩了。 - Ken
你确定它直接在资产文件夹中,而不是子文件夹中吗? - Kevin Coppock
@kcoppock:它直接在资产文件夹中。 - Ken
我尝试使用ini文件时遇到了相同的压缩错误。 - BuvinJ
你可以告诉安卓不要压缩某些文件类型:https://dev59.com/LG025IYBdhLWcg3wKCb-#33359656 - TTransmit
显示剩余6条评论

19
    InputStream is = getResources().getAssets().open("terms.txt");
    String textfile = convertStreamToString(is);

public static String convertStreamToString(InputStream is)
            throws IOException {
            Writer writer = new StringWriter();

            char[] buffer = new char[2048];
            try {
                Reader reader = new BufferedReader(new InputStreamReader(is,
                        "UTF-8"));
                int n;
                while ((n = reader.read(buffer)) != -1) {
                    writer.write(buffer, 0, n);
                }
            } finally {
                is.close();
            }
            String text = writer.toString();
            return text;
    }

这不起作用!文本文件大致如下:%PDF-1.5 %���� 54 0 obj <</Linearized 1/L 241790/O 56/E 103481/N 7/T .................. - Dr.jacky

3

你能使用类似于

    try {
        BufferedReader br = new BufferedReader(new InputStreamReader(context.getAssets().open("fileName.txt")));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

这是我目前正在做的事情。对于我的需求来说,使用缓冲读取器逐行读取太慢了。 - Ken
1
然后,不要使用BufferedReader,而是使用BufferedInputStream。 但我很惊讶的是,缓冲读取器/缓冲输入流是否会减慢您的应用程序,因为它们存在的目的就是加快我们对操作系统资源的I/O访问。 - Nick Campion
快速回复 - 谢谢。我会尝试这个。逐行读取文本文件并没有帮助,我需要向前读取,但这可能不是唯一的原因。我想找出来。 - Ken

3

它无法读取它,因为assets文件夹中的所有资源都被压缩了,尝试将其扩展名更改为.mp3,然后进行阅读,这应该可以防止其被压缩。


2

我发现如果你正在使用像Eclipse这样的IDE,你可能需要进行清理--或者删除bin目录中的API。当你构建时,似乎资产并没有得到更新。


1
AssetManager am = context.getAssets();
InputStream fs = am.open("myFile.txt");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接