1. 程式人生 > 其它 >使用Java API之遞迴方式 列出目標資料夾中的所有內容

使用Java API之遞迴方式 列出目標資料夾中的所有內容

package com.imooc.bigdata.hadoop.hdfs;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progress;
import org.apache.hadoop.util.Progressable;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.net.URI; /** * 使用Java API操作HDFS檔案系統 * * 因為是放在test下面,所以最好使用單元測試的方式 * 在pom中引入的jUnit單元測試的方式 * 單元測試有兩個方法:(1)在單元測試之前進行;(2)在單元測試之後進行 * * 關鍵點: * 1)建立Configuration * 2)獲取FileSystem * 3)剩下的是HDFS API的操作
*/ public class HDFSApp { public static final String HDFS_PATH = "hdfs://hadoop000:8020"; //Configuration、FileSystem是每一個方法使用之前必須構建的 Configuration configuration = null; FileSystem fileSystem = null; @Before public void setup() throws Exception{ System.out.println("-----setup-----"); configuration
= new Configuration(); configuration.set("dfs.replication", "1"); /* *構造一個訪問指定HDFS系統的客戶端物件 * 第一個引數:HDFS的URI * 第二個引數:客戶端指定的配置引數 * 第三個引數:客戶的使用者名稱 */ fileSystem = FileSystem.get(new URI("hdfs://hadoop000:8020"), configuration, "hadoop"); } /* * Api遞迴方式 列出目標資料夾中的所有內容 */ @Test public void listFilesRecursive() throws Exception{ RemoteIterator<LocatedFileStatus> files = fileSystem.listFiles(new Path("/hdfsApi/test"), true); while (files.hasNext()){ LocatedFileStatus file = files.next(); String isDir = file.isDirectory() ? "Folder " : "File"; String permission = file.getPermission().toString(); short replication = file.getReplication(); long length = file.getLen(); String path = file.getPath().toString(); System.out.println(isDir + "\t" + permission + "\t" + replication + "\t" + length + "\t" + path ); } } @After public void tearDown(){ System.out.println("-----tearDown-----"); //置空 configuration = null; fileSystem = null; } }

存在命令列遞迴顯示資料夾下所有層級內容

[hadoop@hadoop000 ~]$ hadoop fs -ls -R /hdfsApi/test