从java中的CSV文件中提取值
我在从我正在开发的android应用程序的CSV文件中提取值时遇到一些问题。CSV文件采用以下格式:从java中的CSV文件中提取值,java,android,csv,Java,Android,Csv,我在从我正在开发的android应用程序的CSV文件中提取值时遇到一些问题。CSV文件采用以下格式: Acton Town (District),Acton Town (Piccadilly),2.00 Aldgate (Circle),Aldgate (Metropolitan),4.00 Aldgate East (District),Aldgate East (Hammersmith And City),2.00 我尝试使用以下方法将其导入java类: public ArrayList&
Acton Town (District),Acton Town (Piccadilly),2.00
Aldgate (Circle),Aldgate (Metropolitan),4.00
Aldgate East (District),Aldgate East (Hammersmith And City),2.00
我尝试使用以下方法将其导入java类:
public ArrayList<Connection> importConnections(){
try
{
//gets the lines.txt file from assets
in = this.getAssets().open("connections.csv");
Scanner scan = new Scanner(in);
TextView lineData = (TextView)findViewById(R.id.displayLine);
String connection = null;
String startingStation = null;
String endingStation = null;
Float duration = 0;
do
{
connection = scan.nextLine();
String delimiter = ",\n";
StringTokenizer tokens = new StringTokenizer(connection, delimiter);
startingStation = tokens.nextToken();
endingStation = tokens.nextToken();
duration = Float.parseFloat(tokens.nextToken());
connections.add(startStation, endStation, duration);
}
while(scan.hasNext());
//for testing purposes
lineData.setText(endingStation);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return connections;
}
如果我把这个评论删掉
duration=Float.parseFloat(tokens.nextToken())
它将运行该方法。有人能找到这种方法的任何错误吗?您可以尝试使用OpenCSV 它使用起来非常简单,并返回每行的数组
CSVReader reader = new CSVReader(new FileReader(<filepath>));
String[] temp;
int NUM = #; //number of rows in csv, or insert code to read through file until null.
for(int i = 0; i < NUM; i++)
{
temp = reader.readNext(); //read next line into temp
}
System.out.println(temp[0]); //Acton Town (District)
System.out.println(temp[1]); //Acton Town (Piccadilly)
System.out.println(temp[2]); //2.00 (string)
reader.close();
CSVReader reader=new CSVReader(new FileReader());
字符串[]温度;
int NUM=#//csv中的行数,或插入代码以读取文件直至为空。
for(int i=0;i
就像我说的,它很容易使用,并且可以防止您自己解析字符串。您可以尝试使用OpenCSV 它使用起来非常简单,并返回每行的数组
CSVReader reader = new CSVReader(new FileReader(<filepath>));
String[] temp;
int NUM = #; //number of rows in csv, or insert code to read through file until null.
for(int i = 0; i < NUM; i++)
{
temp = reader.readNext(); //read next line into temp
}
System.out.println(temp[0]); //Acton Town (District)
System.out.println(temp[1]); //Acton Town (Piccadilly)
System.out.println(temp[2]); //2.00 (string)
reader.close();
CSVReader reader=new CSVReader(new FileReader());
字符串[]温度;
int NUM=#//csv中的行数,或插入代码以读取文件直至为空。
for(int i=0;i
正如我所说,它很容易使用,并且可以防止您自己解析字符串。如果您需要帮助,可以做几件事。你能发日志吗?你能告诉我们哪条线路出故障了吗?您是否在调试器中运行它并查看是什么导致它失败的?如果让我猜一猜,那就是你用的分隔符。我想应该是“,”。读线应该使用\n我认为。您没有异常名称和堆栈跟踪吗?这就是为什么会发生错误的原因。@Kaediil您想要日志的哪一部分?我以前从未在这里发布过logcat。@entonio堆栈跟踪返回null这行
connections.add(开始、结束、持续时间)代码>不编译。起点和终点在哪里定义?这应该是startingStation
endingStation
?如果您需要帮助,可以做几件事。你能发日志吗?你能告诉我们哪条线路出故障了吗?您是否在调试器中运行它并查看是什么导致它失败的?如果让我猜一猜,那就是你用的分隔符。我想应该是“,”。读线应该使用\n我认为。您没有异常名称和堆栈跟踪吗?这就是为什么会发生错误的原因。@Kaediil您想要日志的哪一部分?我以前从未在这里发布过logcat。@entonio堆栈跟踪返回null这行connections.add(开始、结束、持续时间)代码>不编译。起点和终点在哪里定义?这应该是startingStation
endingStation
?OpenCSV支持浮动吗?在您给出的示例中,持续时间为2,但持续时间最多可以是2位小数,例如3。78@BenNewton它以字符串的形式返回每个值。您可以使用Float.parseFloat(string)
进行转换。编辑文章以显示正确的输出,Geobits的注释回答了您的问题。OpenCSV支持Float吗?在您给出的示例中,持续时间为2,但持续时间最多可以是2位小数,例如3。78@BenNewton它以字符串的形式返回每个值。您可以使用Float.parseFloat(string)
对其进行转换。编辑帖子以显示正确的输出,Geobits的评论回答了您的问题。