AndroidStudio 找不到 CSV 文件。尝试过绝对文件路径和相对文件路径

问题描述 投票:0回答:2

我创建了一个简单的 Android 应用程序,可以向用户显示文本。

现在我正在尝试实现 CSVReader 以从 CSV 文件中检索文本。经过几个小时的尝试不同的事情。

我终于实现了一个开源

CSVReader
(至少它不再给我任何编译错误)。

现在,当我运行应用程序时,它崩溃了,并且出现“找不到文件”异常。要么我没有将 CSV 文件放置在正确的位置,要么我没有引用正确的文件路径,或者两者兼而有之。

我尝试使用绝对文件路径(例如从我的

C:/Users/Tim/AndroidStudioProjects/...
开始)。

我还尝试使用从资产文件夹(例如

"Assets/SOCIAL_POSTS.csv"
)开始的相对路径,但我尝试过的任何方法都不起作用。

我尝试在 Stack Overflow 上寻找类似的问题,并且尝试了文件路径的几种变体,但到目前为止没有任何效果。你认为我接下来应该尝试什么?

这里是 GitHub 上该项目的链接

指向 CSV 文件的代码位于

app > src > main > java > com > example > tim > inspiredquestions

CSV 文件名为

SOCIAL_POSTS.csv
,位于

Assets > SOCIAL_POSTS.csv

最后一点:我已经使用 StackOverflow 进行调试帮助一年了,但这是我问的第一个问题。

感谢您的耐心等待!我试图尽可能地自力更生,但我会冒险寻求帮助。我确信这个问题有一个我忽略的简单答案。

java android csv filepath opencsv
2个回答
1
投票

我如何使用 Android Studio 处理文件是将我的文件放置在 raw 文件夹中,然后将它们推送到 /data/data/yourapplication/files 目录。我通过 Tools/Android/Android Device Monitor 执行此操作,导航到 /data/data/yourapplication/files 目录,然后选择右上角的一个图标,显示“将文件推送到设备上”,然后导航到我的应用程序并选择我想要放置在 /files 目录中的 csv 文件。 从那时起,我将我的流读者瞄准该目录, 就我而言, /data/data/app/com.android/example/darrell/MenuPlanner/files 目录。此处处理的文件使用文件扩展名,不需要指定路径:

    public List<EntreeData>     ReadEntreesFromFilesDir(Context inContext) {
    this.mContext = inContext;
    List<String> lines = new ArrayList<String>();
    String[] separated;
        try {
            FileInputStream fis = mContext.openFileInput("entrees.csv");
            InputStreamReader isr = new InputStreamReader(fis);
            BufferedReader bufferedReader = new BufferedReader(isr);
            while ((mLine = bufferedReader.readLine()) != null) {
                if (mLine == null) break;
                lines.add(mLine);
            }
            fis.close();
            isr.close();
        } catch (FileNotFoundException e) {
            Log.d("FILE ERROR", e.getMessage() + " not found");
        } catch (IOException ioe) {
            Log.d("FILE ERROR", ioe.getMessage());
        }
    for (int x = 0;x<lines.size();x++){
        separated = lines.get(x).split(",");
        EntreeData thisEntree = new EntreeData();
        thisEntree.setEntreeName(separated[0].trim());
        thisEntree.setCategory(separated[1].trim());
        thisEntree.setSubcategory(separated[2].trim());
        thisEntree.setRecipe(separated[3].trim());
        mEntreeList.add(thisEntree);
    }
    return mEntreeList;
}

作为后备,我从不可写的 /res/raw 目录中读取数据,并且我确信文件完整性。此处的文件不使用扩展名,因此请将流阅读器指向不使用扩展名的文件。 还可以使用资产管理器访问这些文件:

public List<EntreeData>     ReadEntreesFileFromRaw(Context inContext) {
    this.mContext = inContext;
    List<String> lines = new ArrayList<String>();
    String[] separated;    
    AssetManager assetManager = mContext.getAssets();
    try {
        InputStream inputStream = mContext.getResources().openRawResource(R.raw.entrees);
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        int lineCount = 0;
        while ((mLine = reader.readLine()) != null) {
            separated = mLine.split(",");
            EntreeData entreeEntry = new EntreeData();
            if (mLine == null) break;
            separated = mLine.split(",");
            entreeEntry.setEntreeName(separated[0].trim());
            entreeEntry.setCategory(separated[1].trim());
            entreeEntry.setSubcategory(separated[2].trim());
            entreeEntry.setRecipe(separated[3].trim());
            mEntreeList.add(lineCount, entreeEntry);
            lineCount++;
        }
        inputStream.close();
    } catch (FileNotFoundException e) {
        Log.d("FILE ERROR", e.getMessage() + " not found");
    } catch (IOException ioe) {
        Log.d("FILE ERROR", ioe.getMessage());
    }

    return mEntreeList;
}

祝你好运,编程愉快!


1
投票

我终于找到答案了。我添加了这个:

    final CSVReader csvReader = new 
CSVReader(new InputStreamReader(c.getAssets().open("SOCIAL_POSTS.csv") 

查看这个问题的答案后,转到 Game.java 中的加载函数。

之前我已将 CSV 文件放在

app/src/main
下的资产文件夹中,但在查看该帖子之前我不知道如何正确访问该文件。

© www.soinside.com 2019 - 2024. All rights reserved.