探究在一个循环中,下载文件在HDFS上不存在会怎么样,某次的循环异常会不会影响整体的循环

探究在一个循环中,指定的下载文件在HDFS上不存在会怎么样,某次的循环异常会不会影响整体的循环。

HDFS上文件如下图:

在这里插入图片描述

代码贴上:

 public static void test() throws Exception {

        //本地保存路径
        String downUrls = "D:/-------" ;

        //操作目录文件路径
        String fileHdfsUrls = "/uploadTest";

        //hdfs链接地址
        String hdfsUrls = "--------------";
//        创建文件夹
//        Path path = new Path("/uploadTest");
//        boolean mkdirs = fileSystem.mkdirs(path);
//        if (mkdirs){
//            System.out.println("chenggong");
//        }else {
//            System.out.println("shibai");
//        }

        //链接hdfs
        FileSystem fileSystem = HDFSTool.getActiveFs(hdfsUrls);
        System.out.println(fileSystem+"-------------------------------链接成功");


//        RemoteIterator<LocatedFileStatus> iterator
//                = fileSystem.listFiles(path, false);

//        while (iterator.hasNext()) {
//            LocatedFileStatus next = iterator.next();
//            path = next.getPath();
//            String name = path.getName();
//            String hdfsFilePath = fileHdfsUrls + "/" + name;
//            HDFSTool.download(fileSystem, hdfsFilePath, downUrls, false);
//        }




        String path = fileHdfsUrls + "/" + "test" + " " + "(2).txt";
//        boolean delete = fileSystem.delete(new Path("/" + "test" + " " + "(2).txt"), true);
//        if (delete){
//            System.out.println("删除成功");
//        }else {
//            System.out.println("删除失败");
//        }

        //删除掉一个文件 还剩六个文件
        HDFSTool.rm(fileSystem,path);
        
        int a = 1;
        for (int i = 0; i < 7; i++) {

            String filePatnName = "test" + " " +  "(" + a + ")" + "." + "txt";

            String hdfsFilePath =  fileHdfsUrls + "/" + filePatnName;
            System.out.println(hdfsFilePath);

            HDFSTool.download(fileSystem, hdfsFilePath, downUrls, false);
            a++;
        }
    }

    public static void main(String[] args) throws Exception {
        test();
    }

}

:注释部分为链接hdfs 遍历获取文件名称拼接 下载所有文件

测试结果:

单词循环异常不会影响整体循环。文件可以下载下来。

删除文件后下载结果:

在这里插入图片描述

控制台异常信息(截取部分):

在这里插入图片描述

在这里插入图片描述

好的,我可以为您解释一下在不同版本的HDFS,getFileStatus()方法在目录或文件不存在情况下发生什么。 1. HDFS 1.x版本 在HDFS 1.x版本,如果您尝试使用getFileStatus()方法获取一个不存在文件或目录的状态,则抛出FileNotFoundException异常。 2. HDFS 2.x版本 在HDFS 2.x版本,如果您尝试使用getFileStatus()方法获取一个不存在文件或目录的状态,则返回null值。 3. HDFS 3.0及以上版本 在HDFS 3.0及以上版本,如果您尝试使用getFileStatus()方法获取一个不存在文件或目录的状态,则返回一个空的FileStatus列表,而不是null值。这是因为Hadoop 3.0及以上版本HDFS API已经被更新,以便更好地支持S3和其他对象存储系统。因此,如果您使用HDFS 3.0及以上版本,您可以期望看到这种行为。 下面是一个示例代码,演示了如何在HDFS上使用getFileStatus()方法获取文件或目录的状态: ```java // 导入必要的类 import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.Path; import java.io.IOException; public class HdfsGetFileStatusExample { public static void main(String[] args) { // 创建Hadoop配置对象 Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://localhost:9000"); try { // 创建HDFS文件系统对象 FileSystem fs = FileSystem.get(conf); // 要获取状态的文件或目录路径 Path pathToGetStatus = new Path("/user/test/file.txt"); // 获取文件或目录的状态 FileStatus[] statusList = fs.getFileStatus(pathToGetStatus); if (statusList.length == 0) { System.out.println("文件或目录不存在!"); } else { System.out.println("文件或目录存在!"); // 打印文件或目录的基本信息 for (FileStatus status : statusList) { System.out.println("Name: " + status.getPath().getName()); System.out.println("Path: " + status.getPath()); System.out.println("Is Directory: " + status.isDirectory()); System.out.println("Length: " + status.getLen()); System.out.println("Owner: " + status.getOwner()); System.out.println("Group: " + status.getGroup()); System.out.println("Permission: " + status.getPermission()); System.out.println("Access Time: " + status.getAccessTime()); System.out.println("Modification Time: " + status.getModificationTime()); } } // 关闭HDFS文件系统对象 fs.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的示例,我们首先创建了一个Hadoop配置对象,并设置了HDFS的默认文件系统URL为hdfs://localhost:9000。然后,我们获取了一个HDFS文件系统对象,指定要获取状态的文件或目录路径,并调用FileSystem的getFileStatus()方法来获取该文件或目录的状态。最后,我们打印了该文件或目录的基本信息。 请注意,在使用getFileStatus()方法获取文件或目录的状态前,最好先检查它是否存在,以避免不必要的错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清淡的粥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值