Java文件操作

本文详细介绍了如何在Java中使用File类进行文件操作,包括创建File对象、获取文件路径、检查文件存在状态、目录判断、文件创建、删除和重命名,以及递归扫描目录并删除特定文件。
摘要由CSDN通过智能技术生成

创建File对象:


在Java中想要对文件进行操作,需要先创建一个File对象

通过下面的语句:

我们创建了一个f文件对象

后面是我们为该对象指定的文件路径

这之后我们就可以通过这个对象来对文件进行具体的操作了:


 

File类的用法:
 


引入java io包内的File包,就可以对文件对象进行操作了


import java.io.File;

public class Demo_1 {
    public static void main(String[] args) throws IOException {
        File f = new File("path/to/your/file.txt");

        //导入 java.io.File 类。
        //
        //在 main 方法中创建了一个 File 对象 f,该对象代表了一个文件。
        //
        //使用 getParent() 方法获取文件的父目录并打印出来。
        //
        //使用 getName() 方法获取文件的名称并打印出来。
        //
        //使用 getPath() 方法获取文件的路径并打印出来。
        //
        //使用 getAbsolutePath() 方法获取文件的绝对路径并打印出来。
        //
        //使用 getCanonicalPath() 方法获取文件的规范路径并打印出来。注意,这个方法可能会抛出 IOException,
        //
        // 因此需要在方法声明中添加 throws IOException 来处理可能的异常

        System.out.println(f.getParent());
        System.out.println(f.getName());
        System.out.println(f.getPath());
        System.out.println(f.getAbsolutePath());
        System.out.println(f.getCanonicalPath());

    }

}

ps:更换path/to/your/file.txt成你要操作的文件

这里我用自己桌面上一个txt文件做演示:

注意:“规范路径”就是类似:"dir//subdir///file.txt" 规范化为 "dir/subdir/file.txt"

或者:"dir/./subdir/../file.txt" 规范化为 "dir/file.txt"的操作

public class Demo_2 {
    public static void main(String[] args) throws IOException {
        File file = new File("path/to/your/desFile");

        //检查文件是否存在:
        System.out.println(file.exists());
        //检查文件是否为目录
        System.out.println(file.isDirectory());
        //检查文件是否为普通文件
        System.out.println(file.isFile());

        //创建一个文件并用ret记录是否创建成功
        boolean ret = file.createNewFile();
        System.out.println("ret = "+ret);

        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());


    }

}

运行结果:

可以看到,这里调用的方法的返回值都是Boolean类型的

根据返回结果说明:我所查找的文件存在,并且不是文件目录,是一个普通文件

但是因为这里我使用了一个本来存在的文件,所以在创建新文件时没有创建成功

现在让我们删掉它:

public class Demo_3 {
    public static void main(String[] args){
        File file = new File("path/to/your/desFile");
        //删除文件并返回是否删除成功信息
        boolean ret = file.delete();

        System.out.println("ret = "+ ret);
    }

}

可以看到现在返回为true,说明文件删除成功了

现在我们再用上面那段代码创建文件:

可以看到,这次file.exists()方法返回了false,文件不存在

所以后面的文件创建成功,返回true

与此同时,创建成功的文件在目标路径点出现(图中设置为桌面):

现在我们给demo.txt里写点东西:


import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;

public class Demo_8 {
    public static void main(String[] args){
        try{
            OutputStream outputStream = new FileOutputStream("path/to/your/desFile",true);

            String s = "Hello World! 你好世界!";
            outputStream.write(s.getBytes());

        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

上面这段代码使用输出流

创建了一个输出流对象来将数据写入指定文件

在 OutputStream outputStream = new FileOutputStream("path/to/your/desFile",true);

中,第二个参数表示以追加模式打开文件

也就是在文件内容后添加

否则就会首先清除文件原有内容再添加

为demo.txt中写入“Hello World! 你好世界!”

效果:

再使用下面的代码读取文件内的文字:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Demo_10 {
    public static void main(String[] args) {
        // 指定记事本文件的路径
        String filePath = "path/to/your/desFile";

        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String line;
            // 逐行读取文件内容
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.err.println("文件读取错误: " + e.getMessage());
        }
    }
}

运行:

上面这个程序使用了BufferdReader来读取文件内容

实际上还可以使用Scanner来扫描文件内容并输出:

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.Scanner;

public class Demo_9 {
    public static void main(String[] args){
        try {
            InputStream inputStream =  new FileInputStream("path/to/your/desFile");
            //使用Scanner从文件中读取数据:
            Scanner scanner  = new Scanner(inputStream);

            if(scanner.hasNextLine()){
                String line = scanner.nextLine();
                System.out.println(line);
            }

        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}

通过创建输入流对象(InputStream)来从指定文件文件中读取数据

使用if检查是否存在可读语句

最后输出文件内容

依旧可以读取文件内容

最后给demo.txt重命名一下:

public class Demo_6 {
    public static void main(String[] args){
        File srcFile = new File("原文件路径");
        File detFile = new File("修改后文件路径");

        //判断重命名是否成功:
        boolean isSucceed = srcFile.renameTo(detFile);
        System.out.println("isSucceed: "+ isSucceed);
    }
}

运行成功:

demo.txt文件也被重命名成了Demo.txt:

通过递归的方式查找目标路径文件并删除:



import java.io.File;
import java.util.Scanner;

public class FileSystemOperation {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要扫描的路径:");
        String path = scanner.next();
        File rootPath = new File(path);

        if (!rootPath.isDirectory()) {
            System.out.println("您输入的扫描路径有误");
            return;
        }

        System.out.println("请输入要删除文件的关键词:");
        String keyWord = scanner.next();

        scanDirectory(rootPath, keyWord);
    }

    private static void scanDirectory(File rootPath, String keyWord) {
        File[] files = rootPath.listFiles();
        if (files == null) {
            return;
        }
        for (File file : files) {
            System.out.println("当前扫描文件:"+file.getAbsolutePath());

            if (file.isFile()) {
                checkDelete(file, keyWord);
            } else if (file.isDirectory()) {
                scanDirectory(file, keyWord);
            }else{
                scanDirectory(file,keyWord);
            }
        }
    }

    private static void checkDelete(File file, String keyWord) {
        if (file.getName().contains(keyWord)) {
            if (file.delete()) {
                System.out.println("文件 " + file.getName() + " 已删除");
            } else {
                System.out.println("文件 " + file.getName() + " 删除失败");
            }
        }
    }
}

首先这段代码使用Scanner来接收一个扫描的路径,并且判断输入的是否是目录

然后创建一个scanDirectory方法

设置成private static:

  1. 封装性scanDirectory 方法的功能是递归地扫描指定目录下的所有文件和子目录,并进行相应的操作。这个功能是与类的其他部分相互独立的,不需要被外部直接调用。将其设置为私有方法可以隐藏内部实现细节,使得类的使用者无需关心其具体实现,提高了代码的封装性和安全性。

  2. 静态性: scanDirectory 方法并不依赖于类的实例状态,而是根据传入的参数执行相应的操作,因此可以将其设置为静态方法。静态方法可以直接通过类名调用,而不需要创建类的实例对象,更符合方法的使用场景

scanDirectory方法接受一个文件路径和一个要删除的目标文件的名称(keyword)

File[] files = rootPath.listFiles():来获取当前路径下所有的文件

并用for来遍历

如果当前文件是一个普通文件不是目录,就调用checkDelete方法来检查

是否符合关键字并删除

删除之后返回信息:

现在,我们将刚才的Demo.txt文件放到下面这个路径中:

D:\File\Example

运行代码:

输入路径

输入关键字:

删除成功!

文件夹中的Demo.txt也被删除:

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值