Java 无法使用扫描仪将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()) {

我对此有点陌生,但有人知道为什么我的代码不能读取csv文件吗?这是我的密码:

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)。