无法通过Android中的BufferedReader访问CSV文件

时间:2014-01-31 16:14:58

标签: android csv

我正在尝试使用Android中的BufferedReader读取CSV文件。我的程序在Java中运行得非常好,但是当我尝试从Android读取这些数据后,我得到了错误。

01-31 17:09:58.466: W/System.err(15912): java.io.FileNotFoundException:   
/Users/sabbir/Documents/workspace/TestCSV/src/file/input.csv: open failed: ENOENT (No 
such file or directory)

以下代码我在这里使用。

public double getLongitudes() {
    BufferedReader br = null;
    String line = "";
    String cvsSplitBy = ";";
    String[] nextLine;
    double longitudes = 0;

    try {

        br = new BufferedReader(
                new FileReader(

"/Users/sabbir/Documents/workspace/TestCSV/src/file/input.csv"));
        while ((line = br.readLine()) != null) {
            // use comma as separator

            String[] country = line.split(cvsSplitBy);
            longitudes = Double.parseDouble(country[5]);
            Log.d("worked", "worked");

            // System.out.println("Latitude " + longitudes);

        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    System.out.println("Done");

    return (longitudes);
}}

知道为什么会发生这种情况吗?

4 个答案:

答案 0 :(得分:1)

路径/Users/sabbir/Documents/workspace/TestCSV/src/file/input.csv无效。这看起来像是计算机上文件的路径而不是Android设备。您需要将文件推送到设备或模拟设备,然后从那里访问它。即使是Android模拟器也不会直接从计算机的文件系统中读取文件。

答案 1 :(得分:1)

.csv文件需要在您的项目资源中。您可以将文件复制到assets文件夹中并以这种方式阅读

AssetInputStream asset_stream = (AssetInputStream)getAssets().open("input.csv");
InputStreamReader reader = new InputStreamReader(asset_stream);
BufferedReader br = new BufferedReader(reader);

这是以前对我有用的一种方法。

另一种方法是将文件放入res / raw文件夹并访问它

InputStream file = getResources().openRawResource(R.raw.inputfile);

您还可以参考https://stackoverflow.com/a/3851429/3092829

希望这有帮助!

答案 2 :(得分:1)

在Android中存储CSV的正确方法是:

("/sdcard/Android/data/filename.csv");

答案 3 :(得分:0)

所以我解决了我的问题。

public class ReadCSV {
BufferedReader br = null;
String line = "";
String cvsSplitBy = ";";
String[] nextLine;
String[] country;

AssetInputStream asset_stream = null;

public String[] getLatitude() {

    try {
        asset_stream = (AssetInputStream) MainActivity.getContext()
                .getAssets().open("Input.csv");
    } catch (IOException e) {
        e.printStackTrace();
    }
    InputStreamReader reader = new InputStreamReader(asset_stream);

    Log.d("logg", "log" + reader);
    br = new BufferedReader(reader);
    Log.d("logg", "log" + br);

    try {
        while ((line = br.readLine()) != null) {
            country = line.split(cvsSplitBy);

        }
    } catch (NumberFormatException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return country;

}

正如你所看到的那样,我试图通过国家回归来获得自己的自由度。但是当我尝试从另一个片段类中获取它时,

String[] lat;
lat = csv.getLatitude();
Log.d("", "" + lat); 

为什么我没有回归?