1. import java.io.BufferedReader;
    2. import java.io.InputStreamReader;
    3. import org.apache.hadoop.conf.Configuration;
    4. import org.apache.hadoop.fs.FileSystem; // 拥有open和create方法,分别用于读取和写入文件,其返回值分别为FSDataInputStream;和FSDataOutputStream;
    5. import org.apache.hadoop.fs.Path; // 用于处理文件路径问题,PathFilter类还可以对文件进行过滤
    6. import org.apache.hadoop.fs.FSDataInputStream; // 文件输入流,是读取文件后获得的输入流对象
    7. public class ReadFile {
    8. public static void main(String[] args) {
    9. try {
    10. Configuration conf = new Configuration(); //新建conf配置对象,用于配置文件系统中所有要使用的值
    11. conf.set("fs.defaultFS","hdfs://localhost:9000"); // 设置默认的文件系统位置,本例中通过域名指定hdfs系统
    12. conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem"); // 设置hdfs要实现的java类dfs
    13. FileSystem fs = FileSystem.get(conf); // 将配置项传给FS类,连接到hdfs上
    14. Path file = new Path("file1.txt"); // 创建要读取文件的路径,路径默认是在/user/hadoop下,即完整文件名为/user/hadoop/file1.txt
    15. FSDataInputStream getIt = fs.open(file); //文件输入流,用于从hadoop中读取文件,用open方法打开这个文件
    16. BufferedReader d = new BufferedReader(new InputStreamReader(getIt)); //创建输入缓冲流
    17. String content = d.readLine(); //读取文件一行
    18. System.out.println(content);
    19. d.close(); //关闭文件
    20. fs.close(); //关闭hdfs
    21. } catch (Exception e) {
    22. e.printStackTrace();
    23. }
    24. }
    25. }

    Path类的作用与 Node 中的 path 模块类似,都是用于合并多个目录结构的,比如 new Path(“a”,”b”) 其结果就是 a/b ,这一点和 path 模块的作用一摸一样。
    并且 读取或者写入文件的方法 open 和 create 都要求必须传入一个类型为 Path 的对象,也就是说指定文件的时候必须用Path类来创建路径。