我正在尝试将 csv 文件“read_ex.csv”读入数组。我在 web/stackoverflow 上无休止地搜索以找到一种将文件读入数组的方法。我能做的最好的事情是以流方式读取它,但由于文件大小可变,我无法将它存储在数组中。我相信 ArrayList 是一种处理可变大小数组的方法,但我不知道如何使用它。本质上,我希望能够在 while 循环完成后访问字符串数组“值”。
import java.util.Scanner;
import java.io.FileNotFoundException;
import java.io.File;
public class sortarray {
public static void main (String []agrs){
String fileName= "read_ex.csv";
File file= new File(fileName);
try{
Scanner inputStream= new Scanner(file);
while(inputStream.hasNext()){
String data= inputStream.next();
String[] values = data.split(",");
System.out.println(values[1]);
}
inputStream.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
}
//This prints out the working directory
System.out.println("Present Project Directory : "+ System.getProperty("user.dir"));
}
}
原文由 mikeL 发布,翻译遵循 CC BY-SA 4.0 许可协议
尽管使用 @Minjun.Y 提到的 Apache CSV 库非常好,但我尝试提供一个更接近您的代码并且可能更容易让您遵循的解决方案:
让我们逐步了解它:
我又添加了 3 个导入:
ArrayList
、Arrays
和List
- 你很快就会看到它们的优点。它们都取自java.util
库,这是一个标准库,每个 JDK 都可用。Java 中的每个类名都以大写字母开头(按照惯例——它也会以小写字母构建,但你应该习惯这个惯例)——我在你的代码中“修复”了这个。
我添加了一个二维数组
List<List<String>> lines = new ArrayList<>()
。这乍一看可能有点令人困惑,但这意味着我们创建了一个变量lines
来保存我们的解析结果。List<String>
语法意味着,我们有一个 通用类型List
有一个类型参数String
换句话说:一个字符串列表。整个List<List<String>>
意味着我们有一个字符串列表列表,一个二维字符串数组。使用
lines.add(Arrays.asList(values))
在你的while
循环中,我们可以将你解析的行添加到这个二维数组中。Arrays.asList(values)
transforms theString[]
array into aList
as we need it to be compatible to ourList<List<...>>
type.这允许您的行具有可变长度。我添加的最后几行只是打印二维数组的内容,并且应该为您提供一个很好的示例,说明如何访问该数组中的值。如果您需要有关此构造的更多帮助,请查看 foreach 循环文档。
将其作为输入文件 (
read_ex.csv
):该程序将打印以下输出:
希望这可以帮助 :)