2015-04-23 167 views
0

我創建了一個簡單的Android應用程序,向用戶顯示文本。AndroidStudio找不到CSV文件。試過絕對文件路徑和相對文件路徑

現在我試圖實現CSVReader從CSV文件中檢索文本。幾個小時嘗試不同的事情。

我終於實現了一個開源的CSVReader(至少它不再給我任何編譯錯誤)。

現在,當我運行該應用程序,它崩潰,我得到一個「找不到文件」異常。要麼我沒有把我的CSV文件放在正確的位置,我沒有引用正確的文件路徑,或者兩者都有。

我試過使用絕對文件路徑(例如,以我的C:/Users/Tim/AndroidStudioProjects/...開頭)。

我也嘗試使用相對路徑開始與資產文件夾(例如"Assets/SOCIAL_POSTS.csv"),沒有我已經嘗試過的工作。

我試過在堆棧溢出上尋找類似的問題,並且我嘗試了幾種變體的文件路徑,到目前爲止沒有任何工作。你覺得我應該接下來嘗試什麼?

這是一個link這個項目在GitHub上。

指向CSV文件的代碼是

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

下的CSV文件名爲SOCIAL_POSTS.csv,它是下

Assets > SOCIAL_POSTS.csv 

最後說明一點:我使用的StackOverflow用於調試的幫助現在是一年,但這是我所問的第一個問題。

感謝您的耐心等待!我試圖儘可能地自力更生,但我正在肢體上尋求幫助。我確信這個問題有一個我忽略的簡單答案。

+0

您需要在app/src/main/assets – WISHY

+0

中創建您的資產文件夾,其中java文件正在讀取csv文件? –

+0

Game.java正在讀取csv文件。此外,我忘了推出我最近的代碼。請從主站點獲取更新的代碼。抱歉,缺乏清晰度/麻煩。 –

回答

0

我終於想出了答案。我添加了 在查看this question的答案之後,我在Game.java的加載函數中添加了最終的CSVReader csvReader = new CSVReader(new InputStreamReader(c.getAssets()。open(「SOCIAL_POSTS.csv」)。)之前,我把CSV文件在app/src/main下的資產文件夾中,但我不知道如何正確訪問該文件,直到審查該SO帖子。

0

我如何使用Android Studio的文件是將我的文件放在原始文件夾中,然後將它們推送到/ data/data/yourapplication/files目錄,我通過Tools/Android/Android Device Monitor執行此操作,並導航到/ data/data/yourapplication/files目錄,並在右上角選擇一個圖標,一個文件放到設備上「,然後導航到我的應用程序中的原始文件並選擇我想要放置在/ files目錄中的csv文件。 From the po詮釋我的目標是我的流讀者在該目錄, 在我的情況下,/ 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目錄是不可寫,我很放心文件integrety的。此處的文件不使用擴展名,因此將流式閱讀器指向文件而不使用擴展名。 還可以使用資產管理器來訪問這些文件:

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; 
} 

好運和快樂編程!