Java 无法使用扫描仪将CSV文件读取到阵列
我对此有点陌生,但有人知道为什么我的代码不能读取csv文件吗?这是我的密码:Java 无法使用扫描仪将CSV文件读取到阵列,java,android,android-studio,Java,Android,Android Studio,我对此有点陌生,但有人知道为什么我的代码不能读取csv文件吗?这是我的密码: try { Scanner s = new Scanner(new File("/sdcard/test.txt")); // s.useDelimiter(";"); ArrayList<String> list = new ArrayList<String>(); while (s.hasNextLine()) {
try {
Scanner s = new Scanner(new File("/sdcard/test.txt"));
// s.useDelimiter(";");
ArrayList<String> list = new ArrayList<String>();
while (s.hasNextLine()) {
list.add(s.next());
}
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
s.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
当我将文件更改为此文件时,它会工作:
010000;
010001;
010002;
所以我猜问题是单词之间的空格?有什么解决办法吗?我似乎没有发现你的代码有任何错误,对我来说它是有效的。csv文件的重新编码可能有任何问题 我建议在读取文件时使用扫描仪而不是
扫描仪
:
try(BufferedReader br=new BufferedReader(new FileReader(“/sdcard/test.txt”)){
弦线;
列表=新建LinkedList();
而((line=br.readLine())!=null){
addAll(Arrays.asList(line.split(“;”));
}
对于(int i=0;i
在这种情况下,a也很有用,因此不必显式调用方法close
如果您想要更具功能性的代码,可以使用Java 8 Streams,如下所示:
try(BufferedReader br=new BufferedReader(new FileReader(“/sdcard/test.txt”)){
br.行()
.flatMap(行->流(行拆分(“;”))
.forEach(System.out::println);
}捕获(IOE异常){
e、 printStackTrace();
}
您可以阅读有关Streams API的更多信息。我似乎没有发现您的代码有任何错误,对我来说,它是有效的。csv文件的重新编码可能有任何问题 我建议在读取文件时使用扫描仪而不是
扫描仪
:
try(BufferedReader br=new BufferedReader(new FileReader(“/sdcard/test.txt”)){
弦线;
列表=新建LinkedList();
而((line=br.readLine())!=null){
addAll(Arrays.asList(line.split(“;”));
}
对于(int i=0;i
在这种情况下,a也很有用,因此不必显式调用方法close
如果您想要更具功能性的代码,可以使用Java 8 Streams,如下所示:
try(BufferedReader br=new BufferedReader(new FileReader(“/sdcard/test.txt”)){
br.行()
.flatMap(行->流(行拆分(“;”))
.forEach(System.out::println);
}捕获(IOE异常){
e、 printStackTrace();
}
您可以阅读有关Streams API的更多信息。这是编码问题。我刚刚在代码中添加了“windows-1250”:
(new FileInputStream("/sdcard/test.csv"), "windows-1250"));
谢谢大家:)这是编码问题。我刚刚在代码中添加了“windows-1250”:
(new FileInputStream("/sdcard/test.csv"), "windows-1250"));
谢谢大家:)你所说的“代码”是什么意思?阅读
.csv
文件后,它看起来是如何打印的?很抱歉,不清楚。输出与在.csv文件中写入的输出完全相同。010000; 010001; 010002; 它分为三行。很抱歉,我不知道如何在注释中编写代码。只是使用相同的csv运行代码,并且它与useDelimeter
一起工作。文件是如何编码的?如果文件编码为UTF-8,但编码为ANSI或UNICODE,则我会复制您的结果(这可能会导致另一个问题,即您将hasNextLine
和next
-不确定是否有意这样做)。将“UTF-8”
on参数添加到扫描仪(新扫描仪(新文件(“…”,“UTF-8”)
似乎纠正了问题(假设文件编码为utf-8)。你所说的工作是什么意思?
?在阅读.csv
文件后,它看起来是如何打印的?很抱歉不清楚。输出与在.csv文件.010000;010001;010002;中所写的完全相同,共有3行。很抱歉,我不知道如何在注释中编写代码。只需使用相同的csv运行代码,它就可以工作了d使用useDelimeter
。文件是如何编码的?如果文件编码为UTF-8,但作为ANSI或UNICODE,我会复制您的结果(这可能会导致另一个问题,您将hasNextLine
和next
-不确定这是否是有意的)。将“UTF-8”
参数添加到扫描仪(newscanner(新文件(“…”,“utf-8”)
似乎可以纠正问题(假设文件编码为utf-8)。