测试文本
1234.log
I Love China
I love my country
沁园春
北国风光,千里冰封,万里雪飘。
望长城内外,惟余莽莽;大河上下,顿失滔滔。
山舞银蛇,原驰蜡象,欲与天公试比高。
须晴日,看红装素裹,分外妖娆。
江山如此多娇,引无数英雄竞折腰。
惜秦皇汉武,略输文采;唐宗宋祖,稍逊风骚。
一代天骄,成吉思汗,只识弯弓射大雕。
俱往矣,数风流人物,还看今朝。
读取hdfs文件,本地文件
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public static void main(String[] args) {
Path path = new Path("C:\\Users\\86135\\Desktop\\1234.log");
List<String> lis = new ArrayList<>();
Configuration configuration = new Configuration();
FSDataInputStream fsDataInputStream = null;
FileSystem fileSystem = null;
BufferedReader br = null;
try {
fileSystem = path.getFileSystem(configuration);
fsDataInputStream = fileSystem.open(path);
String str3;
while ((str3 = fsDataInputStream.readLine()) != null) {
System.out.println("\u001b[1;41m"+str3);
}
}catch (IOException e) {
e.printStackTrace();
}
}
结果1(乱码)
fsDataInputStream = fileSystem.open(path)中文乱码
public static void main(String[] args) {
Path path = new Path("C:\\Users\\86135\\Desktop\\1234.log");
List<String> lis = new ArrayList<>();
Configuration configuration = new Configuration();
FSDataInputStream fsDataInputStream = null;
FileSystem fileSystem = null;
BufferedReader br = null;
try {
fileSystem = path.getFileSystem(configuration);
fsDataInputStream = fileSystem.open(path);
/*String str3;
while ((str3 = fsDataInputStream.readLine()) != null) {
System.out.println("\u001b[1;41m"+str3);
}*/
br = new BufferedReader(new InputStreamReader(fsDataInputStream));
String str2;
while ((str2 = br.readLine()) != null) {
System.out.println("\u001b[1;41m"+str2);
}
}catch (IOException e) {
e.printStackTrace();
}
}
//用BufferedReader包装一层,就可以解决
br = new BufferedReader(new InputStreamReader(fsDataInputStream));
结果2(正常)
Path path = new Path("hdfs://192.168.1.111:9000/test/1234log");
Configuration configuration = new Configuration();
FileSystem fileSystem = path.getFileSystem(configuration);
FSDataInputStream fsDataInputStream = fileSystem.open(path);
以上既可以读取本地文件,也可以读取hdfs上的文件,
亲测有效,
如果解决不了,中文读取乱码补充
~ 首先文件编码必须是utf-8的格式
~查看文件编码格式(记事本打开,点击另存为,就可以看到编码格式)
~如果是ANSI 编码格式的文件则
br = new BufferedReader(new InputStreamReader(fsDataInputStream,"GBK"));
~编码格式设置为gbk即可!!!