FileSystem
實例提供了建立目錄的方法正則表達式
public boolean mkdirs(Path f) throws IOException
apache
這個方法一次性建立全部必要但尚未的父目錄編程
一般不須要顯式建立一個目錄,由於調用create()
方法寫入文件時會自動建立全部父目錄數組
FileStatus
類封裝了文件系統中文件和目錄的元數據包括文件長度,塊大小,副本,修改時間,全部者,權限信息FileSystem
的getFileStatus
方法用於獲取文件或目錄的FileStatus
對象exists()
方法檢查文件或者目錄是否存在使用FileSystem
的listStatus()
方法bash
public FileStatus[] listStatus(Path f) throws IOException public FileStatus[] listStatus(Path f, PathFilter filter) throws IOException public FileStatus[] listStatus(Path[] files) throws IOException public FileStatus[] listStatus(Path[] files, PathFilter filter) throws IOException
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FileUtil; import org.apache.hadoop.fs.Path; import java.io.IOException; import java.net.URI; public class ListStatus { public static void main(String[] args) throws IOException { String uri = args[0]; Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(URI.create(uri), conf); Path[] paths = new Path[args.length]; for (int i=0; i < paths.length; ++i) { paths[i] = new Path(args[i]); } FileStatus[] status = fs.listStatus(paths); // stat2Path2方法將一個FileStatus對象數組轉換爲一個Path對象數組 Path[] listedPaths = FileUtil.stat2Paths(status); for (Path p : listedPaths) { System.out.println(p); } } }
javac ListStatus.java
ide
hadoop ListStatus hdfs://localhost:9000/user/hadoop/input hdfs://localhost:9000/user/hadoop/output
oop
Hadoop爲執行通配1提供了兩個FileSystem
方法this
public FileStatus[] globStatus(Path pathPattern) throws IOException public FileStatus[] globStatus(Path pathPattern, PathFilter filter) throws IOException
globStatus()
方法返回與其路徑匹配於指定模式的全部文件的FileStatus
對象數組,並按路徑排序PathFilter
命令做爲可選項能夠進一步對匹配結果進行限制Hadoop支持的通配符與Unix bash的相同.net
通配符 | 名稱 | 匹配 |
---|---|---|
* | 星號 | 匹配0或多個字符 |
? | 問號 | 匹配單一字符 |
[ab] | 字符類 | 匹配{a,b}集合中的一個字符 |
[^ab] | 非字符類 | 匹配非{a,b}集合中的一個字符 |
[a-b] | 字符範圍 | 匹配一個在a-b範圍內的字符(包括a,b),a在字典順序上要小於或等於b |
[^a-b] | 非字符範圍 | 匹配一個不在a-b範圍內的字符(包括a,b),a在字典順序上要小於或等於b |
{a,b} | 或選擇 | 匹配包含a或b中的一個的表達式 |
\c | 轉義字符 | 匹配元字符c |
FileSystem
中的listStatus()
和 globStatus()
方法提供了可選的 PathFilter
對象, 以編程方式控制通配符package org.apache.hadoop.fs; public interface PathFilter { boolean accept(Path path); }
pathFilter
和 java.io.FileFilter
同樣,是 Path
對象, 而不是 File
對象import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.PathFilter; public class RegexExcludePathFilter implements PathFilter { private final String regex; public RegexExcludePathFilter(String regex) { this.regex = regex; } @Override public boolean accept(Path path) { return !path.toString().matches(regex); } }
使用 FileSystem
的 delete()
方法能夠永久性刪除文件或目錄
public boolean delete(Path f, boolean recursive) throws IOException
recursive
的值會被忽略recursive
值爲 true
時,非空目錄及其內容纔會被刪除, 不然會拋出IOException異常在一個表達式中使用通配符來匹配多個文件是比較方便的,無需列舉每一個文件和目錄來指定輸入,該操做稱爲"通配"↩