学习-Java输入输出之File类之获取文件信息

第1关:学习-Java输入输出之File类之获取文件信息

目录

第1关:学习-Java输入输出之File类之获取文件信息

任务描述

相关知识

编程要求

测试说明

代码:


任务描述

本关任务:判断给定的字符串是目录、文件路径还是其它。

相关知识

File 对象既可以表示文件,又可以表示目录,下面我们来了解一下更多关于 File 对象的操作。

#####获取文件信息常用方法

已知在C:/Users/yy/Desktop/file目录下有文件a.txtb.txt

当 File 对象表示目录时,有以下常用方法获取文件信息:

public static void main(String[] args) throws IOException{
        File f = new File("C:\\Users\\yy\\Desktop\\file");
        // 判断是否是目录
        boolean directory1 = f.isDirectory();
        System.out.println(directory1);
        // 返回定义文件对象的路径
        String path = f.getPath();
        System.out.println(path);
        // 返回绝对路径
        String absolutePath = f.getAbsolutePath();
        System.out.println(absolutePath);
        // 以字符串数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹)
        String[] list = f.list();
        System.out.println(Arrays.toString(list));
        // 以文件数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹)
        File[] fs= f.listFiles();
        System.out.println(Arrays.toString(fs));
        // 以字符串形式返回所在文件夹
        String parent = f.getParent();
        System.out.println(parent);
        // 以文件形式返回所在文件夹
        File parentFile = f.getParentFile();
        System.out.println(parentFile);
    }

执行结果:

true
C:\Users\yy\Desktop\file
C:\Users\yy\Desktop\file
[a.txt, b.txt]
[C:\Users\yy\Desktop\file\a.txt, C:\Users\yy\Desktop\file\b.txt]
C:\Users\yy\Desktop
C:\Users\yy\Desktop

当 File 对象表示文件时,有以下常用方法获取文件信息:

 public static void main(String[] args) throws IOException{
        File f = new File("C:\\Users\\yy\\Desktop\\file\\a.txt");
        // 判断是否是文件
        boolean file = f.isFile();
        System.out.println(file);
        // 获取文件字节大小
        long length = f.length();
        System.out.println(length);
        // 判断文件是否可读
        boolean b = f.canRead();
        System.out.println(b);
        // 判断文件是否可写
        boolean b1 = f.canWrite();
        // 判断文件是否存在
        boolean exists = f.exists();
        System.out.println(exists);
        // 获取文件名字
        String name = f.getName();
        System.out.print(name);
    }

执行结果:

true
10
true
true
a.txt

编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,判断给定的字符串是目录、文件路径还是其它。具体要求如下:

  • 接收给定的一行字符串(如:/test);
  • 如果字符串是目录,输出该目录下的所有文件;
  • 如果字符串是文件,获取文件名并输出文件大小;
  • 如果既不是目录又不是文件,请输出提示语句:“非法字符串”。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。

例: 测试输入:

/test

预期输出:

[a.txt,b.txt]

测试输入:

/test/a.txt

预期输出:

a.txt
11

测试输入:

test

预期输出:

非法字符串

代码:

import java.io.*;
import java.util.Arrays;
import java.util.Scanner;

public class FileTest {
    public static void main(String[] args) throws IOException {
        // 请在Begin-End间编写完整代码
        /********** Begin **********/
        // 接收给定字符串
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        // 创建文件对象
		File f = new File(s);
        // 如果字符串是文件,获取文件名并输出文件大小
        if(f.isFile()){
            String name = f.getName();
            System.out.println(name);
            long length = f.length();
            System.out.println(length);
        // 如果字符串是目录,输出该目录下的所有文件
        }else if(f.isDirectory()){
            String[] list = f.list();
            System.out.println(Arrays.toString(list));
        // 如果字符串既不是文件,又不是目录,输出提示语句:“非法字符串”
        }else{
            System.out.println("非法字符串");
        }
        
        /********** End **********/
    }
}

开始你的任务吧,祝你成功!

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. IO:(Input Output)是输入输出流 从内存到硬盘就是输出流Output 从硬盘到内存就是输入流Input IO操作的最基础的是文件File 2. File 1. 概念:就是java中的一个文件或者文件夹。如果没有后缀就表示是一个文件夹,如果有后缀就表示文件。 2. 作用:为了IO流提供操作的基础 3. 使用: 1. 常量: 1.1. static String pathSeparator 与系统相关的路径分隔符字符,为方便起见,表示为字符串。 1.2. static String separator 2. 构造方法: 2.1 File(String pathname) 根据文件名创建一个File对象, pathname:(如果有后缀就是一个文件对象,如果没有后缀会默认为是一个文件夹对象) 1. 相对路径:相对于当前Java的项目 2. 绝对路径:从根目录或者盘符开始 /都表示从根目录或者盘符开始 2.2 File(String parent, String child) 在父级目录下创建一个文件文件夹 parent:父级目录 child:当前目录或者当前文件 2.3 File(File parent, String child) 在父级目录下创建一个文件文件夹 3. 常用方法: 常用方法:获取文件夹或者子文件方法 * 1.String[] list()获取当前文件夹下所有的子文件夹或者子文件的名 //文件没有下一级 2.File[] listFiles() 获取当前文件夹下所有的子文件夹或者子文件对象 ===================================有过滤功能=================================== * 3.String[] list(FilenameFilter filter) 获取根据文件名过滤后的文件FilenameFilter:文件名过滤器接口 4.File[] listFiles(FilenameFilter filter) 获取根据文件名过滤后的文件对象 FilenameFilter:文件名过滤器接口 -----------------------------上面只能根据文件名或者文件夹名过滤,下面的可以通过文件的其他属性过滤,例如:文件大小等----------------------------- 5.File[] listFiles(FileFilter filter) 获取根据文件过滤后的文件对象 FileFilter:文件过滤器接口 2. 递归: 1. 概念:是一种思想,也是一种算法。在方法内部调用自己的方法。(自己干自己) 2. 作用:就是简化有相似的业务逻辑(循环)代码。 3. 使用规律特点: 1. 通过数值带入的方式,查找逻辑规律: 将所有的已知条件写出来 就是有相似运算逻辑的代码 2. 通过条件判断(条件/循环)的方式,在满足条件的时候根据规律调用自己的方法。 如果不满足就不会自己的方法,这就是出口 4. 使用场景: 1. 树状结构数据、菜单结构、上下级关系等的数据查询 2. 有相似逻辑运算的结构 3. 适用于层级结构少,数据量小的场景。(最重要)如果层级多,且数据量大用循环。 5. 解决了哪些问题: (1)数据的定义是按递归定义的。(Fibonacci函数:斐波拉契数列) (2)问题解法按递归算法实现。(汉诺塔问题) 这问题虽则本身没有明显的递归结构,但用递归求解比迭代求解更简单,如Hanoi问题。 (3)数据的结构形式是按递归定义的。 如二叉树、广义表等,由于结构本身固有的递归特性,则它们的操作可递归地描述。 6. 注意事项: 1. 递归必须 有出口 2. 能用循环用循环,不要用递归,因为效率极其低下。 为什么效率低下? 方法的调用都是创建新栈帧,入栈,而栈层级是有限制的 StackOverflowError : 栈内存溢出错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值