【发布时间】:2014-06-17 08:43:02
【问题描述】:
我想将 8 个整数存储到一个 .csv 文件中(文件名将作为 EditText 的输入)并在需要时检索它们。
【问题讨论】:
-
问题在哪里?
我想将 8 个整数存储到一个 .csv 文件中(文件名将作为 EditText 的输入)并在需要时检索它们。
【问题讨论】:
要获取文件名,您可以使用:
EditText fileNameEdit= (EditText) getActivity().findViewById(R.id.fileName);
String fileName = fileNameEdit.getText().toString();
然后将文件写入磁盘:
try {
String content = "Separe here integers by semi-colon";
File file = new File(fileName +".csv");
// if file doesnt exists, then create it
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
读取文件:
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader(fileName+".csv"));
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
然后要获得整数,您可以使用拆分功能:
String[] intArray = sCurrentLine.split(";");
【讨论】:
由于 JDK 问题,Opencsv 无法在 Android 上运行。
如果您看到类似于以下内容:
05-04 16:13:31.821 25829-25829/? E/AndroidRuntime:致命异常: 主进程:com.example.pk.opencsvpoc,PID:25829 java.lang.NoClassDefFoundError:解析失败: Ljava/beans/Introspector;
这是因为 Android 只将 java.beans 的一个子集移植到它的 java的版本。您可以在以下位置查看支持列表 https://developer.android.com/reference/java/beans/package-summary
有计划在 opencsv 5.0 中切换到反射,但我 怀疑它会删除我们对 java.beans 的所有依赖项。就目前而言 opencsv 的最佳建议是避开 com.opencsv.bean 类,直到 Android 完全支持 java.beans 或者我们成功 在删除 java.beans。
另一种可能性是尝试另一个 csv 库。我检查了阿帕奇 commons csv 和 super-csv 和 apache 不会转换为 bean,但是 super-csv 确实只使用反射。
来源:https://sourceforge.net/p/opencsv/wiki/FAQ/#getting-noclassdeffounderror-when-using-android
【讨论】:
CSV 是普通文本文件,其中的值以字符“;”分隔因此,您可以使用 BufferedWriter 来编写它。
【讨论】: