【问题标题】:Android path to asset txt file资产txt文件的Android路径
【发布时间】:2011-06-14 22:19:25
【问题描述】:

我在做:

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

在 Android 项目和许多变体中。在运行时我得到一个文件未找到异常。该文件在资产文件夹中存在且正确,因此我的路径一定是错误的。

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

【问题讨论】:

  • 你考虑过文件名区分大小写吗?

标签: android file path assets


【解决方案1】:
AssetFileDescriptor descriptor = getAssets().openFd("myfile.txt");
FileReader reader = new FileReader(descriptor.getFileDescriptor());

尝试将上述内容与 FileDescriptors 一起使用。似乎是我发现的收集资产路径的最简单的方法。

【讨论】:

  • @kcoppock:这里 Dalvik 抱怨“FileNotFoundException”,说文件可能被压缩了。
  • 您确定它直接在资产文件夹中,而不是子文件夹中?
  • @kcoppock:直接在assets文件夹里。
  • @SK9:我不认为这是导致你的问题的原因,但我有一个错字,应该是getFileDescriptor(),而不是getDescriptor(),但我假设你已经想到了那个出...
  • 你能发布你的踪迹吗?根据文档,FileReader(FileDescriptor) 不能抛出 FileNotFoundException,而 openFd(String) 只会抛出 IOException。
【解决方案2】:
    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
【解决方案3】:

你可以使用类似的东西

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

【讨论】:

  • 这就是我目前正在做的事情。使用缓冲阅读器逐行阅读对我的需求来说太慢了。
  • 然后使用 bufferedInputStream 代替 BufferedReader。但是,如果缓冲读取器/缓冲输入流正在减慢您的应用程序,我会感到惊讶,因为它们的存在就是为了加快我们对操作系统资源的 I/O 访问。
  • 快速回复 - 谢谢。我会试试这个。逐行阅读文本文件没有帮助,我需要提前阅读,但这可能不是唯一的原因。我想知道的。
【解决方案4】:

它没有读取它,因为资产文件夹中的所有资产都被压缩了,尝试将其扩展名更改为 .mp3 然后读取它,这应该会阻止它被压缩。

【讨论】:

    【解决方案5】:

    我发现如果您使用的是 Eclipse 之类的 IDE,您可能需要进行清理——或者删除 bin 目录中的 API。在您进行构建时,资产似乎没有得到更新。

    【讨论】:

      【解决方案6】:
      AssetManager am = context.getAssets();
      InputStream fs = am.open("myFile.txt");
      

      【讨论】:

        猜你喜欢
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-02
        • 2021-04-15
        • 1970-01-01
        • 2014-05-19
        • 2017-08-07
        相关资源
        最近更新 更多