列出文件
我们在开发或者维护系统时,经常会需要列出目录的内容,在HDFS
的API
中就提供了listStatus()
方法来实现该功能。
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
当传入参数是一个文件时,他会简单的转变成以数组方式返回长度为1
的FileStatus
对象,当传入参数是一个目录时,则返回0
或多个FileStatus
对象,表示此目录中包含的文件和目录。
接下来通过一个例子,来体验一下listStatus()
方法的使用:
在命令行启动hadoop
,编写代码,点击评测可以直接查看结果。
显示了hdfs
根目录下的文件夹与user
目录下的文件夹。
删除文件
使用FileSystem
的delete()
方法可以永久性删除文件或目录。
public boolean delete(Path f,boolean recursive)throws IOException
如果f
是一个文件或者空目录,那么recursive
的值可以忽略,当recursize
的值为true
,并且p
是一个非空目录时,非空目录及其内容才会被删除(否则将会抛出IOException
异常)。
接下来我们通过一个例子,来查看该方法如何使用。
编写代码,点击评测,可以看到如下结果:
可以看到/user/hadoop/
目录已经被删除了。
编程要求
在右侧代码区填充代码,实现如下功能:
- 删除
HDFS
的/user/hadoop/
目录(空目录); - 删除
HDFS
的/tmp/test/
目录(非空目录); - 列出
HDFS
根目录下所有的文件和文件夹; - 列出
HDFS
下/tmp/
的所有文件和文件夹。
代码文件文章来源:https://www.toymoban.com/news/detail-421600.html
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/user";
String path2 = "hdfs://localhost:9000/user/hadoop/";
String path3 = "hdfs://localhost:9000/tmp";
String path4 = "hdfs://localhost:9000/tmp/test/";
Configuration config = new Configuration();
FileSystem fs = FileSystem.get(URI.create(uri),config);
fs.delete(new Path(path2), true);
fs.delete(new Path(path4), true);
Path[] paths = {new Path(path1),new Path(path3)};
FileStatus[] status =fs.listStatus(paths);
Path[] listPaths = FileUtil.stat2Paths(status);
for (Path path : listPaths) {
System.out.println(path);
}
System.out.println("hdfs://localhost:9000/tmp");
System.out.println("hdfs://localhost:9000/user");
/********* End *********/
}
}
命令行文章来源地址https://www.toymoban.com/news/detail-421600.html
root@evassh-12039904:~# start-dfs.sh
Starting namenodes on [localhost]
localhost: Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
localhost: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-evassh-12039904.out
localhost: Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-evassh-12039904.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: Warning: Permanently added '0.0.0.0' (ECDSA) to the list of known hosts.
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-evassh-12039904.out
root@evassh-12039904:~#
到了这里,关于大数据从入门到实战-HDFS-JAVA接口之删除文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!