2016-05-18 146 views
0

我試圖打開一個CSV文件下載到內部存儲器以供閱讀目的。這是我使用的代碼:CSV文件無法在Android中讀取

import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Toast; 

import java.io.FileInputStream; 

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

public void onClick(View v) { 
    try { 
     String FileName = "/storage/emulated/0/Download/MyDocument.csv"; 
     FileInputStream fis = openFileInput(FileName); 
     fis.read(); 
     fis.close(); 
     Toast.makeText(getBaseContext(),"File Access Permitted",Toast.LENGTH_SHORT).show(); 

    } 

    catch (Exception e) { 
     Toast.makeText(getBaseContext(),"File Access Denied",Toast.LENGTH_SHORT).show(); 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

} 

當文件被下載,我能夠在文件管理器中打開它,上面的代碼不起作用。我如何實現所需的功能?

+0

使用一些很好的圖書館,如http://opencsv.sourceforge.net/ – Haroon

+0

它不工作?有沒有例外,或者你已經做過任何類型的輸出來查看它是否正常工作?如果有的話,請包含您的堆棧跟蹤。 'openFileInput'的代碼是什麼? – 4castle

+0

是的。什麼不起作用?看到什麼烤麪包? – greenapps

回答

2

按本stackoverflow question's接受的答案,你可以試試這個:

public String readFileFromDownloads(String fileName) { 
    File downloadsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); 
    if (!downloadsDir.exists()) return null; 

    File file = new File(downloadsDir, fileName); 
    if (!file.exists()) return null; 

    try { 
     StringBuilder fileContent = new StringBuilder(); 
     BufferedReader br = new BufferedReader(new FileReader(file)); 

     String line; 
     while ((line = br.readLine()) != null) { 
      fileContent.append(line); 
      fileContent.append('\n'); 
     } 
     br.close(); 

     return fileContent.toString(); 
    } catch (IOException ex) { 
     //Handle error 
     return null; 
    } 
} 

然後調用readFileFromDownloads("MyDocument.csv");onClick();方法內部。

此外,您可能需要將android.permission.READ_EXTERNAL_STORAGE添加到您的Manifest中,並根據Android Docs處理Android 6.0新權限系統。

+0

嘿@ AR06,我的答案是否適合你? –