最近要做一个Java爬虫,需要从txt文件中读取数据,然后遇到了一些问题。
我的txt文件:
Java读txt文件的语句:
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("E:\\word.txt")));
String line = "";
while((line = reader.readLine())!= null) {
System.out.println(line);
}
读取到的结果存在乱码现象:
寻思着可能是文件的编码格式在作祟。所以我去查看了一下txt的编码格式,发现是utf8,感觉这应该没问题呀。于是我又去查看Java API。
找到InputStreamReader类,查看它的构造方法,它一共有4个构造方法,这里我只选取了与本问题相关的两个构造方法,如下:
Constructor and Description |
---|
InputStreamReader(InputStream in) 创建一个使用默认字符集的InputStreamReader。 |
InputStreamReader(InputStream in, Charset cs) 创建一个使用给定字符集的InputStreamReader |
看来原因是我们使用的是第一个构造方法,它创建了一个使用默认字符集的InputStreamReader,于是在读取文件时进行了编码转换,然后就导致了一些问题的出现。
那么我们再试一试使用第二个构造方法,我们指定字符集为utf8。
修改后的Java读txt文件的语句:
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("E:\\word.txt"),"UTF-8"));
String line = "";
while((line = reader.readLine())!= null) {
System.out.println(line);
}
结果如下:
这个 “?” 是什么鬼。。。
其实现在完全可以忽略 “?” 的问题,只需要在txt文件中第一行添加一个空行,然后在读取的时候,丢弃第一行,从第二行开始读取即可。
1. 在txt中第一行添加一个空行。
2. 在读取时,丢弃第一行,从第二行开始读取:在while循环读取前添加一行:line = reader.readLine();
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("E:\\word.txt"),"UTF-8"));
String line = "";
line = reader.readLine();
while((line = reader.readLine())!= null) {
System.out.println(line);
}
后面,我百度了那个问号出现的原因,有一位高人说明了原因: