我在一维数组中有一个我的想法的例子。它只会输出列。 我的想法是使用2d数组来选择行和列。 这是我的代码:
String fName = "c:\\csv\\myfile.csv";
String thisLine;
int count=0;
FileInputStream fis = new FileInputStream(fName);
DataInputStream myInput = new DataInputStream(fis);
int i=0;
while ((thisLine = myInput.readLine()) != null) {
String strar[] = thisLine.split(";");
out.println(strar[1]); // Here column 2
}
myfile.csv
Id;name
E1;Tim
A1;Tom
输出:
名字蒂姆汤姆
答案 0 :(得分:3)
我只是将分割结果(String[]
)添加到List
然后如果你真的想要它作为2d数组,那么在事后将其转换。
List<String[]> lines = new ArrayList<String[]>();
while ((thisLine = myInput.readLine()) != null) {
lines.add(thisLine.split(";"));
}
// convert our list to a String array.
String[][] array = new String[lines.size()][0];
lines.toArray(array);
答案 1 :(得分:1)
首先我们不知道csv文件中有多少行。因此无法确定2d阵列的长度。我们必须根据这种情况增加数组的大小。但是,通常用java重新调整数组大小是不可能的。因此,当我们需要重新调整数组大小时,我们会创建源数组的新数组和副本内容。
为您解决方案:
int i = 0;//line count of csv
String[][] data = new String[0][];//csv data line count=0 initially
while ((thisLine = myInput.readLine()) != null) {
++i;//increment the line count when new line found
String[][] newdata = new String[i][2];//create new array for data
String strar[] = thisLine.split(";");//get contents of line as an array
newdata[i - 1] = strar;//add new line to the array
System.arraycopy(data, 0, newdata, 0, i - 1);//copy previously read values to new array
data = newdata;//set new array as csv data
}
创建测试以查看csv数据:
for (String[] strings : data) {
for (String string : strings) {
System.out.print("\t" + string);
}
System.out.println();
}
<强>输出:强>
Id name
E1 Tim
A1 Tom
答案 2 :(得分:0)
我会使用动态结构来读取所有行。您还应该使用try-resource块自动关闭流。
public static String[][] readCSV(String path) throws FileNotFoundException, IOException {
try (FileReader fr = new FileReader(path);
BufferedReader br = new BufferedReader(fr)) {
Collection<String[]> lines = new ArrayList<>();
for (String line = br.readLine(); line != null; line = br.readLine()) {
lines.add(line.split(";"));
}
return lines.toArray(new String[lines.size()][]);
}
}
答案 3 :(得分:0)
这是我实现的代码:
String fileName = "myfile.csv";
List<List<String>> list = new ArrayList<List<String>>();
BufferedReader br = new BufferedReader(new FileReader(fileName));
String line = br.readLine();
String[] headers = line.split(";");
for(String header: headers) {
List<String> subList = new ArrayList<String>();
subList.add(header);
list.add(subList);
}
while((line = br.readLine()) != null) {
String[] elems = line.split(";");
for(int i = 0; i < elems.length; i++) {
list.get(i).add(elems[i]);
}
}
br.close();
int rows = list.size();
int cols = list.get(0).size();
String[][] array2D = new String[rows][cols];
for(int row = 0; row < rows; row++) {
for(int col = 0; col < cols; col++) {
array2D[row][col] = list.get(row).get(col);
}
}
array2D
是您的需要。
答案 4 :(得分:0)
我认为您应该看到此代码:
代码:
Path path= Paths.get("url_of_csv_file");
List<String> arr= Files.readAllLines(path);
String[] arr2;
String[][] arr3= new String[records][columns];
for(int i=0; i<records; i++){
arr2= arr.get(i).split("\\,");
for(int j=0; j<columns; j++)
arr3[i][j]= arr2[j];
}
//test case
for(int i=0; i<records; i++){
for(int j=0; j<columns; j++)
System.out.print(arr3[i][j]+" ");
System.out.println();
}