java - 如何将 CSV 文件数据存储到 Java 中的数组中?
问题描述
这是我正在使用的 CSV 文件:
B00123,55
B00783,35
B00898,67
我需要读取并存储在文件中输入的第一个值,例如 B00123 并将其存储到一个数组中。用户可以添加到文件中,因此它不是固定数量的记录。
到目前为止,我已经尝试过这段代码:
public class ArrayReader
{
static String xStrPath;
static double[][] myArray;
static void setUpMyCSVArray()
{
myArray = new double [4][5];
Scanner scanIn = null;
int Rowc = 0;
int Row = 0;
int Colc = 0;
int Col = 0;
String InputLine = "";
double xnum = 0;
String xfileLocation;
xfileLocation = "src\\marks.txt";
System.out.println("\n****** Setup Array ******");
try
{
//setup a scanner
/*file reader uses xfileLocation data, BufferedRader uses
file reader data and Scanner uses BufferedReader data*/
scanIn = new Scanner(new BufferedReader(new FileReader(xfileLocation)));
while (scanIn.hasNext())
{
//read line form file
InputLine = scanIn.nextLine();
//split the Inputline into an array at the comas
String[] InArray = InputLine.split(",");
//copy the content of the inArray to the myArray
for (int x = 0; x < myArray.length; x++)
{
myArray[Rowc][x] = Double.parseDouble(InArray[x]);
}
//Increment the row in the Array
Rowc++;
}
}
catch(Exception e)
{
}
printMyArray();
}
static void printMyArray()
{
//print the array
for (int Rowc = 0; Rowc < 1; Rowc++)
{
for (int Colc = 0; Colc < 5; Colc++)
{
System.out.println(myArray[Rowc][Colc] + " ");
}
System.out.println();
}
return;
}
public static void main(String[] args)
{
setUpMyCSVArray();
}
}
这会循环文件,但不会用任何数据填充数组。结果是:
****** Setup Array ******
[[D@42a57993
0.0
0.0
0.0
0.0
0.0
解决方案
在尝试将 ID 转换为 Double 时,在第一行中实际上发生了 NumberFormatException。所以我修改了程序,它对我有用。
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class ArrayReader
{
static String xStrPath;
static Map<String,Double> myArray = new HashMap<>();
static void setUpMyCSVArray()
{
Scanner scanIn = null;
int Rowc = 0;
int Row = 0;
int Colc = 0;
int Col = 0;
String InputLine = "";
double xnum = 0;
String xfileLocation;
xfileLocation = "/Users/admin/Downloads/mark.txt";
System.out.println("\n****** Setup Array ******");
try
{
//setup a scanner
/*file reader uses xfileLocation data, BufferedRader uses
file reader data and Scanner uses BufferedReader data*/
scanIn = new Scanner(new BufferedReader(new FileReader(xfileLocation)));
while (scanIn.hasNext())
{
//read line form file
InputLine = scanIn.nextLine();
//split the Inputline into an array at the comas
String[] inArray = InputLine.split(",");
//copy the content of the inArray to the myArray
myArray.put(inArray[0], Double.valueOf(inArray[1]));
//Increment the row in the Array
Rowc++;
}
}
catch(Exception e)
{
System.out.println(e);
}
printMyArray();
}
static void printMyArray()
{
//print the array
for (String key : myArray.keySet()) {
System.out.println(key + " = " + myArray.get(key));
}
return;
}
public static void main(String[] args)
{
setUpMyCSVArray();
}
}
输出:
推荐阅读
- extjs - 如何防止 ExtJS 网格单元格中的文本选择触发 onclick 事件处理程序并因此选择网格行(取消)
- android - 如何持续检查 Firebase 数据库中是否有变化?
- node.js - 节点js中的小数和
- angular - Angular8+ ngswitch 嵌套组件不更新视图
- asp.net-mvc - 为什么数据没有传输到控制器?
- c - 打印矩阵地址而不是值 | C
- angular - 错误类型错误:无法读取 ngx-leaflet 和 esri-leaflet-geocoder 上未定义的属性“topleft”
- ansible - Ansible中有多个json_query?
- node.js - 如何强制 Eclipse 使用特定版本的 NodeJS 来修复错误“无法确定 Node.js 版本”?
- php - Prestashop 自定义模块变量传递给 Theme .tpl 文件