如何在安卓系统中获取正确的文件路径

7

我的代码如下:

Scanner sc = null;
try {
    sc = new Scanner(new File("assets/mainmenu/readSourceFile.txt"));
} catch (FileNotFoundException e1) {
    // TODO Auto-generated catch block
    System.out.println(e1.toString());
    e1.printStackTrace();
}

然后,logcat显示异常java.io.FileNotFoundException

我该如何找到我的文件?我尝试了:

sc = new Scanner(new File("mainmenu/readSourceFile.txt"));

然而,它仍然抛出FilenotFoundException

我的文件在assets/mainmenu/readSourceFile.txt文件夹中

我已经尝试过这个:

private InputStream is;
try {
        is = this.getResources().getAssets().open("mainmenu/readSourceFile.txt");
    } catch (IOException e) {
        e.toString();
    }

我使用getAssets来访问Android中的assets文件。但是,如果我使用 InputStream ,该如何读取文本文件呢?


你的所有目录都在同一个项目中吗?如果是这样,只需将路径设置为./assets/mainmenu/readSourceFile.txt。 - thar45
@barssala,你的文本文件在资产文件夹中吗? - vnshetty
当然,我的文本文件在assets/mainmenu/readSourceFile.txt中。 - barssala
./assets/mainmenu/readSourceFile.txt 抛出了异常 java.io.FileNotFoundException:/./asset/mainmenu/readSourceFile.txt - barssala
3个回答

1

你可以试试这个...希望它能够正常工作

sc = new Scanner(new File("file:///android_asset/mainmenu/readSourceFile.txt");

请尝试编辑此内容

AssetFileDescriptor descriptor = getAssets().openFd("mainmenu/readSourceFile.txt");
FileReader reader = new FileReader(descriptor.getFileDescriptor());

从这里复制 资产文件夹路径


抱歉,但我遇到了“FileNotFoundException”异常。 - barssala
java.io.FileNotFoundException: /file:/android_asset/mainmenu/readSourceFile.txt。更多信息请参见。 - barssala

0

你不能像访问文件系统上的普通文件一样访问Android应用程序的assets文件夹(提示:它们不是)。相反,你需要使用AssetManager。在你的活动/应用程序上下文中调用getAssets()来获取AssetManager

一旦你拥有了这个,你可以使用open("mainmenu/readSourceFile.txt")来获取一个InputStream

现在你可以像处理其他任何InputStream一样读取它。Apache Commons IO是一个很好的用于处理输入和输出流的库。根据你想要获取数据的方式,你可以尝试:

  • 将整个文件读入字符串中:

    try {
        String contents = IOUtils.toString(in);
    } finally {
        IOUtils.closeQuietly(in);
    }
    
  • 将整个文件读入字符串列表中,每行一个字符串:

    try {
        List<String> lines = IOUtils.readLines(in);
    } finally {
        IOUtils.closeQuietly(in);
    }
    
  • 逐行迭代文件内容:

    try {
        LineIterator it = IOUtils.lineIterator(in, "UTF-8");
        while (it.hasNext()) {
            String line = it.nextLine();
            // 对每一行进行操作
        }
    } finally {
        IOUtils.closeQuietly(in);
    }
    

我尝试使用 InputStream,现在可以打开文件。但是如果我使用 InputStream,我不知道如何读取文本文件。 - barssala
Apache Commons IO 使这变得容易。下载 commons-io-2.4.jar 并将其添加到你的 Java Build Path,然后你就可以一次性读取文件:String mContents = IOUtils.toString(mInputStream)。这个链接还展示了如何 “手动” 进行相同的操作(InputStream -> InputStreamReader -> BufferedReader -> 循环),如果由于某种原因不想使用 IOUtils 的话... - quietmint

0

我曾经遇到过同样的问题。我注意到文件不应该包含层次结构。如果将来有人遇到同样的问题,这个方法对我很有效。

    InputStream is=null;

    try {
        is=activity.getAssets().open("fileInAssets.dat");
    } catch (IOException e1) {
        Log.e(TAG, "Erro while openning hosts file.");
        e1.printStackTrace();
    }

`


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