我正在尝试使用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);
}}
知道为什么会发生这种情况吗?
答案 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);
为什么我没有回归?