hadoop分散式檔案系統(HDFS)常用API學習
阿新 • • 發佈:2019-01-13
1、org.apache.hadoop.fs.FileSystem
範圍 | 方法 | 返回值 | 描述 |
---|---|---|---|
addDelegationTokens(String renewer, Credentials credentials) | Token<?>[] | 新增新的token,返回所有的token | |
append(Path f) | FSDataOutputStream | 新增一個已經存在的檔案 | |
append(Path f, int bufferSize) | FSDataOutputStream | 新增一個已經存在的檔案,自定義緩衝區 | |
abstract | append(Path f, int bufferSize, Progressable progress) | FSDataOutputStream | 新增一個已經存在的檔案,自定義緩衝區和寫入過程 |
appendFile(Path path) | FSDataOutputStreamBuilder | 建立一個FSDataOutputStreamBuilder,用於新增檔案 | |
static | areSymlinksEnabled() | boolean | 檔案系統中的符號連線是否可用 |
cancelDeleteOnExit(Path f) | boolean | 在FileSystem關閉時取消刪除指定的檔案 | |
protected | canonicalizeUri(URI uri) | URI | 規範給定的URI |
protected | checkPath(Path path) | void | 檢查Path是否屬於此FileSystem。 |
static | clearStatistics() | void | 重置所有檔案系統的所有統計資訊 |
close() | void | 關閉這個FileSystem例項 | |
static | closeAll() | void | 關閉所有快取的FileSystem例項 |
static | closeAllForUGI(UserGroupInformation ugi) | void | 關閉給定UGI的所有快取檔案系統例項 |
completeLocalOutput(Path fsOutputFile, Path tmpLocalFile) | void | 當我們都寫完目標時呼叫。 | |
concat(Path trg, Path[] psrcs) | void | 將存在的檔案連線 | |
copyFromLocalFile(boolean delSrc, boolean overwrite, Path[] srcs, Path dst) | void | 將本地檔案複製到hdfs中 | |
copyFromLocalFile(boolean delSrc, boolean overwrite, Path src, Path dst) | void | 將本地檔案複製到hdfs中 | |
copyFromLocalFile(boolean delSrc, Path src, Path dst) | void | 將本地檔案複製到hdfs中 | |
copyFromLocalFile(Path src, Path dst) | void | 將本地檔案複製到hdfs中 | |
copyToLocalFile(boolean delSrc, Path src, Path dst) | void | 將hdfs的檔案複製到本地檔案 | |
copyToLocalFile(boolean delSrc, Path src, Path dst, boolean useRawLocalFileSystem) | void | 將hdfs的檔案複製到本地檔案 | |
copyToLocalFile(Path src, Path dst) | void | 將hdfs的檔案複製到本地檔案 | |
static | create(FileSystem fs, Path file, FsPermission permission) | FSDataOutputStream | 建立一個檔案,並新增許可權(注意:並不能直接建立一個檔案,而是建立了一個輸入流,其他的也一樣) |
create(Path f) | FSDataOutputStream | 在指定的路徑上建立一個FSDataOutputStream。 | |
create(Path f, boolean overwrite) | FSDataOutputStream | 在指定的路徑上建立一個FSDataOutputStream。 | |
create(Path f, boolean overwrite, int bufferSize) | FSDataOutputStream | 在指定的路徑上建立一個檔案 | |
create(Path f, boolean overwrite, int bufferSize, Progressable progress) | FSDataOutputStream | 在指定的路徑上建立一個檔案,自定義進度 | |
create(Path f, boolean overwrite, int bufferSize, short replication, long blockSize) | FSDataOutputStream | 在指定的路徑上建立一個檔案 | |
create(Path f, boolean overwrite, int bufferSize, short replication, long blockSize, Progressable progress) | FSDataOutputStream | 在指定的路徑上建立一個檔案 | |
abstract | create(Path f, FsPermission permission, boolean overwrite, int bufferSize, short replication, long blockSize, Progressable progress) | FSDataOutputStream | 在指定的路徑上建立一個檔案 |
create(Path f, FsPermission permission, EnumSet<CreateFlag> flags, int bufferSize, short replication, long blockSize, Progressable progress) | FSDataOutputStream | 在指定的路徑上建立一個檔案 | |
create(Path f, FsPermission permission, EnumSet<CreateFlag> flags, int bufferSize, short replication, long blockSize, Progressable progress, Options.ChecksumOpt checksumOpt) | FSDataOutputStream | 在指定的路徑上建立一個檔案 | |
create(Path f, Progressable progress) | FSDataOutputStream | 在指定的路徑上建立一個檔案 | |
create(Path f, short replication) | FSDataOutputStream | 在指定的路徑上建立一個檔案 | |
create(Path f, short replication, Progressable progress) | FSDataOutputStream | 在指定的路徑上建立一個檔案 | |
createFile(Path path) | FSDataOutputStreamBuilder | 建立一個FSDataOutputStreamBuilder,用於建立檔案 | |
createNewFile(Path f) | boolean | 建立一個空檔案 | |
createNonRecursive(Path f, boolean overwrite, int bufferSize, short replication, long blockSize, Progressable progress) | FSDataOutputStream | 在指定的路徑中開啟一個檔案 | |
createNonRecursive(Path f, FsPermission permission, boolean overwrite, int bufferSize, short replication, long blockSize, Progressable progress) | FSDataOutputStream | 在指定的路徑中開啟一個檔案 | |
createNonRecursive(Path f, FsPermission permission, EnumSet<CreateFlag> flags, int bufferSize, short replication, long blockSize, Progressable progress) | FSDataOutputStream | 在指定的路徑中開啟檔案 | |
createSnapshot(Path path) | Path | 使用預設名稱建立快照。 | |
createSnapshot(Path path, String snapshotName) | Path | 建立一個快照 | |
createSymlink(Path target, Path link, boolean createParent) | void | 建立一個符號連線 | |
delete(Path f) | boolean | 刪除一個檔案 | |
abstract | delete(Path f, boolean recursive) | boolean | 是否迴圈刪除一個檔案及其子檔案 |
deleteOnExit(Path f) | boolean | 當FileSystem關閉時,刪除指定的檔案 | |
deleteSnapshot(Path path, String snapshotName) | void | 刪除目錄的快照 | |
static | enableSymlinks() | void | 啟用符號連線 |
exists(Path f) | boolean | 檢查路徑是否存在 | |
protected | fixRelativePart(Path p) | Path | 修復相對路徑 |
static | get(Configuration conf) | FileSystem | 返回配置的FileSystem例項 |
static | get(URI uri, Configuration conf) | FileSystem | 通過uri和配置檔案例項一個FileSystem |
static | get(URI uri, Configuration conf, String user) | FileSystem | 獲取基於uri,傳入配置和使用者的FileSystem例項 |
getAclStatus(Path path) | AclStatus | 獲取檔案或目錄的ACL | |
static | getAllStatistics() | List<FileSystem.Statistics> | 獲取FileSystem中所有的統計資訊 |
Collection<? | getAllStoragePolicies() | extends | 檢索此檔案系統支援的所有儲存策略 |
getBlockSize(Path f) | long | 獲取FileSystem中塊的大小 | |
getCanonicalServiceName() | String | 獲取此FileSystem的規範服務名稱 | |
protected | getCanonicalUri() | URI | 返回此FileSystem的URI的規範化形式 |
getContentSummary(Path f) | ContentSummary | 返回給定的路徑或檔案的摘要資訊 | |
getDefaultBlockSize() | long | 獲取FileSystem的預設塊大小 | |
getDefaultBlockSize(Path f) | long | 返回大型輸入檔案應該被最優分割的位元組數,以最大限度地減少I/O時間 | |
protected | getDefaultPort() | int | 獲取此FileSystem的預設埠 |
getDefaultReplication() | short | 獲取此FileSystem的預設副本數 | |
getDefaultReplication(Path path) | short | 獲取路徑的預設複本數 | |
static | getDefaultUri(Configuration conf) | URI | 從配置獲取預設的FileSystem URI |
getFileBlockLocations(FileStatus file, long start, long len) | BlockLocation[] | 返回包含給定檔案部分的主機名,偏移量和大小的陣列 | |
getFileBlockLocations(Path p, long start, long len) | BlockLocation[] | 返回包含給定檔案部分的主機名,偏移量和大小的陣列 | |
getFileChecksum(Path f) | FileChecksum | 如果FS支援校驗和,則獲取檔案的校驗和 | |
getFileChecksum(Path f, long length) | FileChecksum | 獲取從檔案開始到特定長度獲取檔案的校驗和 | |
getFileLinkStatus(Path f) | FileStatus | 返回表示路徑的檔案狀態物件,如果路徑指向符號連結,則返回符號連結的FileStatus。如果底層檔案系統不支援符號連結,則該行為等同於#getFileStatus() | |
abstract | getFileStatus(Path f) | FileStatus | 返回表示路徑的檔案狀態物件。 |
static | getFileSystemClass(String scheme, Configuration conf) | Class<?> | 獲取檔案系統的FileSystem實現類。 |
protected | getFSofPath(Path absOrFqPath, Configuration conf) | static | 通過path和配置獲取FileSystem例項 |
static | getGlobalStorageStatistics() | GlobalStorageStatistics | 獲取全域性儲存統計資訊 |
getHomeDirectory() | Path | 在此FileSystem中返回當前使用者的主目錄。 | |
protected | getInitialWorkingDirectory() | Path | 注意:使用新的FileContext類,getWorkingDirectory()將被刪除 |
getLength(Path f) | long | 獲取檔案內容的長度 | |
getLinkTarget(Path f) | Path | 獲取符號連線的實際檔案 | |
static | getLocal(Configuration conf) | LocalFileSystem | 獲取本地檔案系統 |
getName() | String | 獲取檔案系統的名稱 | |
static | getNamed(String name, Configuration conf) | FileSystem | 根據名字和配置例項一個FileSystem |
getPathHandle(FileStatus stat, Options.HandleOpt… opt) | PathHandle | 建立一個持久的,可序列化的給定實體物件的處理 | |
getQuotaUsage(Path f) | QuotaUsage | 返回給定檔案的配額使用情況 | |
getReplication(Path src) | short | 獲取指定檔案得到副本數量 | |
getScheme() | String | 返回此FileSystem的Scheme | |
getServerDefaults() | FsServerDefaults | 返回FileSystem的預設Server | |
getServerDefaults(Path p) | FsServerDefaults | 返回一組Server的預設配置值 | |
static | getStatistics() | Map<String,FileSystem.Statistics> | 獲取FileSystem中的統計資料 |
static | getStatistics(String scheme, Class<? extends FileSystem> cls) | FileSystem.Statistics | |
getStatus() | FsStatus | 返回描述檔案系統使用和容量的狀態物件。 | |
getStatus(Path p) | FsStatus | 返回描述檔案系統使用和容量的狀態物件。 | |
getStoragePolicy(Path src) | BlockStoragePolicySpi | 查詢給定檔案或目錄的有效儲存策略ID | |
getStorageStatistics() | StorageStatistics | 獲取此FileSystem物件的儲存情況 | |
getTrashRoot(Path path) | Path | 當指定的路徑被刪除時,獲取當前使用者的垃圾桶根目錄 | |
getTrashRoots(boolean allUsers) | Collection<FileStatus> | 獲取當前使用者或所有使用者的所有垃圾桶 | |
abstract | getUri() | URI | 返回標識此檔案系統的URI |
getUsed() | long | 返回檔案系統中所有檔案的總大小 | |
getUsed(Path path) | long | 返回指定路徑中所有檔案的總大小 | |
abstract | getWorkingDirectory() | Path | 獲取給定檔案系統的當前工作目錄 |
getXAttr(Path path, String name) | byte[] | 獲取檔案或目錄的xattr key和value | |
getXAttrs(Path path) | Map<String,byte[]> | 獲取檔案或目錄的所有xattr key/value對 | |
getXAttrs(Path path, List<String> names) | Map<String,byte[]> | 獲取檔案或目錄的所有xattrs | |
globStatus(Path pathPattern) | FileStatus[] | 返回所有匹配filePattern的FileStatus,但是不去校驗檔案 | |
globStatus(Path pathPattern, PathFilter filter) | FileStatus[] | 返回所有符合pathPattern,並且過濾後的FileStatus | |
initialize(URI name, Configuration conf) | void | 初始化檔案系統 | |
isDirectory(Path f) | boolean | 判斷一個檔案是不是檔案件 | |
isFile(Path f) | boolean | 判斷path物件是不是一個檔案 | |
listCorruptFileBlocks(Path path) | RemoteIterator<Path> | 列出損壞的檔案塊 | |
listFiles(Path f, boolean recursive) | RemoteIterator<LocatedFileStatus> | 列出給定路徑中檔案的狀態和塊位置 | |
listLocatedStatus(Path f) | RemoteIterator<LocatedFileStatus> | 如果路徑是目錄,則列出給定路徑中檔案/目錄的狀態 | |
protected | listLocatedStatus(Path f, PathFilter filter) | RemoteIterator<LocatedFileStatus> | 列出一個目錄 |
abstract | listStatus(Path f) | FileStatus[] | 如果路徑是目錄,則列出給定路徑中檔案/目錄的狀態 |
listStatus(Path[] files) | FileStatus[] | 使用預設路徑過濾器過濾給定路徑列表中的檔案/目錄 | |
listStatus(Path[] files, PathFilter filter) | FileStatus[] | 使用使用者提供的路徑過濾器過濾給定路徑列表中的檔案/目錄 | |
listStatus(Path f, PathFilter filter) | FileStatus[] | 使用使用者提供的路徑過濾器過濾給定路徑中的檔案/目錄 | |
listStatusIterator(Path p) | RemoteIterator<FileStatus> | 返回一個遠端迭代器,以便在使用條目時按需呼叫後續呼叫 | |
listXAttrs(Path path) | List<String> | 獲取檔案或目錄的所有xattr名稱 | |
makeQualified(Path path) | Path | 限定使用此FileSystem的路徑,如果相對,則返回絕對路徑 | |
static | mkdirs(FileSystem fs, Path dir, FsPermission permission) | boolean | 使用用提供的許可權建立一個目錄。 |
mkdirs(Path f) | boolean | 以預設許可權建立一個目錄 | |
abstract | mkdirs(Path f, FsPermission permission) | boolean | 建立指定許可權的檔案,如果檔案父目錄不存在,則會自動建立 |
modifyAclEntries(Path path, List<AclEntry> aclSpec) | void | 修改檔案和目錄的ACL條目 | |
moveFromLocalFile(Path[] srcs, Path dst) | void | 將本地檔案移動到FileSystem | |
moveFromLocalFile(Path src, Path dst) | void | 將本地檔案移動到FileSystem | |
moveToLocalFile(Path src, Path dst) | void | 將檔案複製到本地檔案系統,然後將其從遠端檔案系統中刪除(如果已成功複製) | |
static | newInstance(Configuration conf) | FileSystem | 為所提供的配置的預設檔案系統返回一個唯一配置的FileSystem實現。 |
static | newInstance(URI uri, Configuration config) | FileSystem | 返回此URI的模式和許可權的FileSystem |
static | newInstance(URI uri, Configuration conf, String user) | FileSystem | 返回此URI的方案和許可權以及給定使用者的FileSystem |
static | newInstanceLocal(Configuration conf) | LocalFileSystem | 獲取唯一的本地FileSystem物件 |
open(Path f) | FSDataInputStream | 在指定的路徑中開啟一個FSDataInputStream | |
open(PathHandle fd) | FSDataInputStream | 開啟一個匹配PathHandle例項的FSDataInputStream | |
open(PathHandle fd, int bufferSize) | FSDataInputStream | 開啟一個匹配PathHandle例項的FSDataInputStream | |
abstract | open(Path f, int bufferSize) | FSDataInputStream | 在指定的路徑中開啟一個FSDataInputStream |
static | printStatistics() | void | 將所有統計資訊以流Sysem.out輸處 |
protected | processDeleteOnExit() | void | 刪除標記為退出時刪除的所有路徑 |
removeAcl(Path path) | void | 刪除除檔案和目錄的基本ACL條目以外的所有條目 | |
removeAclEntries(Path path, List<AclEntry> aclSpec) | void | 從檔案和目錄中刪除ACL條目 | |
removeDefaultAcl(Path path) | void | 從檔案和目錄中刪除所有預設ACL條目。 | |
removeXAttr(Path path, String name) | void | 刪除檔案或目錄的xattr。 | |
abstract | rename(Path src, Path dst) | boolean | 將Path src重新命名為Path dst |
protected | rename(Path src, Path dst, Options.Rename… options) | void | |
renameSnapshot(Path path, String snapshotOldName, String snapshotNewName) | void | 重新命名快照 | |
protected | resolveLink(Path f) | Path | 通過任何符號連結或掛載點解析路徑,返回路徑的全限定路徑 |
resolvePath(Path p) | Path | 通過任何符號連結或掛載點解析路徑,返回路徑的全限定路徑 | |
setAcl(Path path, List<AclEntry> aclSpec) | void | 完全替代檔案和目錄的ACL,丟棄所有現有條目 | |
static | setDefaultUri(Configuration conf, String uri) | void | 在配置中設定預設的FileSystem URI |
static | setDefaultUri(Configuration conf, URI uri) | void | 在配置中設定預設的FileSystem URI |
setOwner(Path p, String username, String groupname) | void | 設定一個路徑的所有者 | |
setPermission(Path p, FsPermission permission) | void | 設定路徑的許可權 | |
setReplication(Path src, short replication) | boolean | 設定現有檔案的複本數 | |
setStoragePolicy(Path src, String policyName) | void | 設定給定檔案或目錄的儲存策略 | |
setTimes(Path p, long mtime, long atime) | void | 設定檔案的訪問時間 | |
setVerifyChecksum(boolean verifyChecksum) | void | 設定驗證校驗和標誌 | |
abstract | setWorkingDirectory(Path new_dir) | void | 設定給定檔案系統的當前工作目錄 |
setWriteChecksum(boolean writeChecksum) | void | 設定寫校驗和標誌 | |
setXAttr(Path path, String name, byte[] value) | void | 設定檔案或目錄的xattr。 | |
setXAttr(Path path, String name, byte[] value, EnumSet<XAttrSetFlag> flag) | void | 設定檔案或目錄的xattr | |
startLocalOutput(Path fsOutputFile, Path tmpLocalFile) | Path | 返回使用者可以將輸出寫入的本地檔案 | |
supportsSymlinks() | boolean | 是都支援符號連線 | |
truncate(Path f, long newLength) | boolean | 將指定路徑中的檔案截斷為指定的大小 | |
unsetStoragePolicy(Path src) | void | 取消設定給定檔案或目錄的儲存策略集 |
2、org.apache.hadoop.fs.Path
方法 | 返回值 | 說明 | 備註 |
---|---|---|---|
new Path(String path) | String | 建構函式 | |
new Path(URI url) | boolean | 建構函式 | |
getName() | String | 獲取檔案或者資料夾的名字 | |
path.isAbsolute() | boolean | 判斷資料夾或檔案是否是絕對路徑 | |
isRoot() | boolean | 是不是根目錄 | |
depth() | int | 檔案或資料夾的深度 | 相對與根路徑,根路徑是0,使用者目錄是2,…. |
getParent() | String | 檔案或資料夾的父路徑 | 如果是根目錄則返回null |
isAbsoluteAndSchemeAuthorityNull | boolean | 如果檔案或目錄是絕對路徑,並且Scheme和Authority都是null返回true | |
isUriPathAbsolute | boolean | 檔案或目錄的uri path 是不是絕對路徑 | |
suffix(String s) | Path | 為檔案或目錄新增字尾 | |
toUri() | URI | path物件轉uri物件 |
3、org.apache.hadoop.FileStatus
方法 | 返回值 | 說明 | 備註 |
---|---|---|---|
getPath() | Path | 返回檔案的Path物件 | |
getAccessTime | long | 返回檔案的上一次訪問時間 | |
getGroup() | String | 返回檔案的組屬性 | |
getOwner() | String | 返回檔案的擁有者 | |
getBlockSize() | long | 返回檔案的塊大小 | |
getLen() | long | 返回檔案內容大小 | |
getPermission() | FsPermission | 返回檔案的許可權物件 | |
getModificationTime() | long | 返回檔案最後修改時間 | |
getSymlink() | Path | 返回檔案符號連線路徑 | |
hasAcl() | boolean | 檔案是否設定ACL | |
isEncrypted() | boolean | 檔案是否加密 | |
isFile() | boolean | 判斷是否是檔案 | |
getReplication() | int | 返回檔案副本數 | |
isSnapshotEnabled() | boolean | 是否使用快照 |
單元測試
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.mapreduce.Cluster;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
public class FileStatusTest {
private FileSystem fs;
private Path path = new Path("hdfs://localhost/user/lhy/poem");
private Cluster cluster;
@Before
public void setUp() throws IOException, InterruptedException {
Configuration configuration = new Configuration();
configuration.set("fs.defaultFS","hdfs://localhost");
fs = FileSystem.get(configuration);
}
@After
public void tearDown() throws IOException {
if (fs != null){
fs.close();
}
if (cluster != null){
cluster.close();
}
}
@Test
public void pathTest() throws IOException {
System.out.println("------------org.apache.hadoop.fs.Path-test-start----------");
System.out.println("檔案或目錄的名字:"+ path.getName());
System.out.println("檔案或目錄是否是絕對路徑:" + path.isAbsolute());
System.out.println("是不是根目錄:" + path.isRoot());
System.out.println("根目錄的深度是1,使用者目錄深度是2,此處檔案的深度是: " + path.depth());
System.out.println("檔案或目錄的父資料夾:" + path.getParent());
System.out.println("檔案或目錄isAbsoluteAndSchemeAuthorityNull:" + path.isAbsoluteAndSchemeAuthorityNull());
System.out.println("檔案或目錄的父資料夾:" + path.getParent());
System.out.println("檔案或目錄的URI Path 是不是絕對路徑:" + path.isUriPathAbsolute());
System.out.println("為檔案或目錄新增字尾:" + path.suffix(".TXT"));
System.out.println("path物件轉uri物件:" + path.toUri());
System.out.println("------------org.apache.hadoop.fs.Path-test-end----------\n");
}
@Test
public void fileStatusTest() throws IOException {
System.out.println("------------org.apache.hadoop.fs.FileStatus-test-start----------");
FileStatus fileStatus = fs.getFileStatus(path);
System.out.println("檔案的path:" + fileStatus.getPath());
System.out.println("檔案的上一次訪問時間:" + fileStatus.getAccessTime());
System.out.println("檔案所屬組:" + fileStatus.getGroup());
System.out.println("檔案的所屬:" + fileStatus.getOwner());
System.out.println("檔案快的大小(單位bit):" + fileStatus.getBlockSize());
System.out.println("檔案內容長度" + fileStatus.getLen());
System.out.println("檔案的許可權:"+ fileStatus.getPermission());
System.out.println("最後修改時間:"+ fileStatus.getModificationTime());
// System.out.println("檔案連線的路徑(軟連線或者硬連線的路徑):"+ fileStatus.getSymlink());//if link path not found,will be throw an exception
System.out.println("是否是一個資料夾:"+fileStatus.isDirectory());
System.out.println("檔案是否設定ACL:"+fileStatus.hasAcl());
System.out.println("檔案是否加密:"+fileStatus.isEncrypted());
System.out.println("是否是檔案:"+fileStatus.isFile());
System.out.println("檔案個副本個數:"+fileStatus.getReplication());
System.out.println("是否使用快照:"+fileStatus.isSnapshotEnabled());
System.out.println("------------org.apache.hadoop.fs.FileStatus-test-end----------\n");
}
@Test
public void filSystemTest() throws IOException {
Path path = new Path("poem");
System.out.println("目錄或檔案是否存在:" + fs.exists(path));
System.out.println("獲取檔案系統的服務地址:" + fs.getCanonicalServiceName());
// Path newPath = new Path("test");
// System.out.println("使用者目錄下建立資料夾test:" + fs.mkdirs(newPath));//如果已經存在,則會建立失敗,丟擲異常
// System.out.println("本地檔案拷貝到hdfs,檔案存在則會覆蓋:");
// Path localPath = new Path(URI.create("/Users/lhy/Desktop/春江花月夜.poem"));
// fs.copyFromLocalFile(localPath,path);
System.out.println("列出所有的檔案:");
FileStatus[] fileStatuses = fs.listStatus(path);
for (FileStatus fileStatus : fileStatuses){
System.out.println(fileStatus.getPath());
}
System.out.println("列出所有過濾後的檔案:");
FileStatus[] fileStatuses2 = fs.listStatus(path, path2 -> !path2.getName().contains("txt"));
for (FileStatus fileStatus : fileStatuses2){
System.out.println(fileStatus.getPath());
}
}
}