AndroidStudio无法找到CSV文件。试过绝对文件路径&相对文件路径

时间:2015-04-23 05:52:30

标签: java android csv filepath opencsv

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

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

我终于实现了一个开源CSVReader(至少它不再给我任何编译错误)。

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

我尝试过使用绝对文件路径(例如从我的C:/Users/Tim/AndroidStudioProjects/...开始)。

我也尝试过使用从Assets文件夹开始的相对路径(例如"Assets/SOCIAL_POSTS.csv"),并且我尝试过的任何工作都没有。

我试过在Stack Overflow上寻找类似的问题,我尝试了几种文件路径的变化,到目前为止还没有任何工作。您认为我接下来应该尝试什么?

这是GitHub上这个项目的link

指向CSV文件的代码位于

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

CSV文件名为SOCIAL_POSTS.csv,位于

Assets > SOCIAL_POSTS.csv

最后说明:我已经使用StackOverflow调试了一年的帮助,但这是我提出的第一个问题。

感谢您的耐心等待!我尽力做到自力更生,但我正在寻求帮助。我确定这个问题有一个我忽略的简单答案。

2 个答案:

答案 0 :(得分:0)

我终于找到了答案。我补充道     最后的CSVReader csvReader =新的CSVReader(新的InputStreamReader(c.getAssets()。open(“SOCIAL_POSTS.csv”)在查看this question的答案之后到我的Game.java中的加载函数。之前我已经放了我的CSV在app / src / main下的assets文件夹中的文件,但在查看SO帖子之前我不知道如何正确访问该文件。

答案 1 :(得分:0)

我如何使用Android Studio文件将我的文件放在原始文件夹中,然后将它们推送到/ data / data / yourapplication / files目录。我通过Tools / Android / Android Device Monitor执行此操作并导航到/ data / data / yourapplication / files目录,并在右上角选择一个图标"将文件推送到设备",然后导航到我的应用程序中的原始文件,并选择我想放在/ files目录中的csv文件。 从那时起,我将我的流阅读器瞄准该目录, 就我而言,/ data / data / app / com.android / examples / darerell / 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;
}
祝你好运,编程愉快!