*上篇外面简单介绍了hdfs的读取与上传文件,主要是实例化FileSystem对象后,调用open()与create()方法来过去输入流FSDataInputStream和输出流FSDataOutputStream.
接下来小小白会来介绍FileSystem是如何列出与删除文件的。
3.1 列出文件
3.1.1 在HDFS中API提供listStatus()方法实现列出目录内容,其中可传入文件或目录。
FIleStatus[] status = fs.listStatus(Path f);
3.1.2 此外还提供了FileUtil工具包,来实现对文件的其他操作,
Path[] listPaths = FileUtil.stat2Paths(status);//直接将FileStatus数组提取数据,形成Path
3.2 删除文件
同样hdfs中API提供delete()方法来上出文件。
public boolean delete(Path f,boolean recursive)throws IOException
delete中的两个参数:若f为空文件或空目录,可忽略recursion 的值;若f为非空文件,且recursion的值为true,其内容才会被删除。
package step4;
import java.io.IOException;
import java.net.URI;
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;
public class FileSystemDelete {
public static void main(String[] args) throws IOException {
//请在 Begin-End 之间添加代码,完成本关任务。
/********* Begin *********/
String uri = "hdfs://localhost:9000/";
String path1 = "hdfs://localhost:9000/tmp";
String path2 = "hdfs://localhost:9000/user/hadoop";
String path3 = "hdfs://localhost:9000/tmp/test";
String path4 = "hdfs://localhost:9000/usr";
Configuration config = new Configuration();
FileSystem fs = FileSystem.get(URI.create(uri),config);
fs.delete(new Path(path2),true); //删除文件
fs.delete(new Path(path3),true);
fs.delete(new Path(path4),true);
Path[] paths = {new Path(uri),new Path(path1)}; //将两个路径放入paths数组中
FileStatus[] status = fs.listStatus(paths); //列出文件内容
Path[] listPaths = FileUtil.stat2Paths(status); //直接从FileStatus数组中提取数据,形成一个listPaths
for(Path path: listPaths){ //使用一个列表增强式来逐个输出文件内容
System.out.println(path);
}
/********* End *********/
}
}
*****Don't aim for success if you really want,just stick to what you love and believe in,and it will come naturally! ------少一些功利主义的追求,多一些不为什么的坚持******