我编写了一个使用Java从文本文件中读取的程序。该文件有1列,包含许多整数值,每个值都被添加到数组列表中。但是,当我打印数组列表时,在每个数字之间我得到一个空条目。例如,如果在文本文件中我有:
4
55
我得到了:
1 : ÿþ4 (Also I do not know what this weird character is)
2 :
3 : 555
代码:
import java.io.*;
import java.util.Scanner;
import java.util.ArrayList;
public class ReadFile {
public static void main(String[] args) {
try
{
Scanner input = new Scanner("ReadingFile.txt");
File file = new File(input.nextLine());
input = new Scanner(file);
ArrayList numbers = new ArrayList();
int i=1;
while (input.hasNextLine()) {
String line = input.nextLine();;
numbers.add(line);
System.out.println(i + " : " + line);
i++;
}
input.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
我试图避免使用arraylist而只是这样做:
System.out.println(i + " " + line);
然而这个问题仍然存在,所以我猜它不是一个ArrayList问题。
答案 0 :(得分:0)
如果你的文本文件实际上是一个好的文本文件,它可能是一个字符编码的东西。您需要在其构造函数中为扫描仪提供正确的字符集。所以改变这一行:
input = new Scanner(file);
类似于:
String charset = "UTF-8";
input = new Scanner(file, charset);
当然,您需要弄清楚您的文件实际存储的字符集并使用该字符集。我这里仅以UTF-8为例。
答案 1 :(得分:0)
好的,问题是你实际上是从excel文件中读取二进制文件,因此是奇怪的字符。如果你想直接阅读excel文件,那么使用像JXL这样的库(http://jexcelapi.sourceforge.net/) - 这是一个使用该API的好教程:http://www.vogella.com/tutorials/JavaExcel/article.html
否则,您需要保存将Excel文件导出为CSV格式并使用您的代码读取该文件。
答案 2 :(得分:0)
奇怪的字符应该是writeUTF前缀或BOM。所以,取决于你如何写文件,阅读方法可以不同。
如果您使用DataOutputStream编写文件并调用writeUTF,那么您应该使用readUTF读取该文件
如果它是由文本程序编写的简单文本文件,如记事本++,我建议为每一行调用trim()函数。
答案 3 :(得分:0)
您的文件看起来像是UTF-16。这两个字符是UTF-16的字节顺序标记。
您必须在构建扫描仪时指定。
final Scanner scanner = new Scanner(file, "UTF-16");
答案 4 :(得分:0)
如果您没有Notepad++
(文本编辑器)下载它。使用它打开生成的文本文件。
查找/替换并填充字段,并通过查看下图查看设置。然后按Replace All
。然后保存您的文件。您的文本文件将是干净的。