文件操作-IO

1.认识文件

1.什么是文件

文件是计算机系统中用来存储数据的基本单位。它是一种用于持久性存储数据的命名、有序的数据集合.计算机系统通过文件系统来组织、管理和访问文件。文件系统提供了一种机制,使得用户和程序可以创建、读取、写入、修改和删除文件,同时也提供了文件的层次结构和存储管理功能。

2.文件路径

在这里插入图片描述

  • 相对路径:相对路径描述了文件或目录相对于当前工作目录的位置.相对路径基于当前所处位置的文件或目录.使用相对路径:. ./Download/aaa
  • 绝对路径是从文件系统根目录开始的完整路径描述,它从文件系统的根目录开始描述文件的位置,包括所有必要的目录结构信息.绝对路径表示为:Data(D:)/Download/aaa
    . ./表示当前文件夹的上个文件
    ./表示当前文件夹

2.java中操作文件

2.1 File类的用法

java.io.File类提供了对文件和目录进行操作的基本方法。它不涉及文件内容的读写,但是可以用于创建、删除、重命名文件或目录,以及获取文件信息等.以下是File类的常见用法:

文件位置就是当前项目创建的位置

  1. 创建文件对象
File file = new File("path/to/your/file.txt"); // 创建文件对象,指定文件路径
  1. 检查文件或目录是否存在
boolean exists = file.exists(); // 检查文件或目录是否存在
  1. 创建新文件或目录
boolean created = file.createNewFile(); // 创建新文件
// 或者
File directory = new File("path/to/your/directory");
boolean dirCreated = directory.mkdir(); // 创建新目录
// 注意:mkdir() 方法只能创建单级目录,如果需要创建多级目录可以使用 mkdirs() 方法
  1. 获取文件信息
String fileName = file.getName(); // 获取文件名
String filePath = file.getAbsolutePath(); // 获取文件的绝对路径
boolean isDirectory = file.isDirectory(); // 检查是否是目录
  1. 删除文件
boolean deleted = file.delete(); // 删除文件
// 或者
file.deleteOnExit();//等到程序退出后再删除
  1. 文件重命名
File oldFile = new File("./newFileName.txt");
File newFile = new File("./src/newFileName.txt");
oldfile.renameTo(newFile); // 重命名文件
//将oldFile重命名为newFile并移动到src目录下

3.InputStream和OutputStream的用法

InputStream 和 OutputStream 是 Java I/O 的核心抽象类,使用时需要具体的实现类,用于处理字节流。它们是操作数据输入和输出的基础,可以用于读取和写入文件、网络流、内存中的数据

 public static void main(String[] args) throws IOException {
        //在使用完流之后,需要关闭它们以释放资源。在 try-with-resources 语句块中创建流可以确保在结束时自动关闭。
        //如果不关闭,就会造成资源泄露!!! 也可使用close进行关闭,但是可能会执行不到,比如中途抛异常,return等,
        //也可采取finally,但代码不美观
       try(InputStream inputStream = new FileInputStream("d:/aaa/t.txt")) {
           while (true) {
               byte[] buf = new byte[1024];
               int n = inputStream.read(buf);
               if (n == -1) {
                   break;
               }
               for (int i = 0; i < n; i++) {
                   //十六进制方式进行打印
                   System.out.printf("%x ", buf[i]);
               }
               //String构造方法内部对字节数组进行编码转换
               String s = new String(buf, 0, n, "utf-8");
               System.out.println(s);
           }
       }
    }

对于字符类型使用InputStream进行读取还是比较麻烦的,其实我们可以使用Scanner搭配流对象进行操作,我们一般使用Scanner都是进行输入的,在参数内部添加System.in,在源码中in的类型就是public final static InputStream in = null;也就是说我们可以传入自己的InputStream对象,对字符类型进行打印.

public static void main(String[] args) throws IOException {
    try(InputStream inputStream = new FileInputStream("d:/aaa/t.txt")) {
            Scanner scanner = new Scanner(inputStream);
            String s = scanner.nextLine();
            System.out.println(s);
        }
}
//注意:Scanner只是用来读文本文件,不适合读取二进制文件,否则会乱码

利用 OutputStreamWriter 进行字符写入

 public static void main(String[] args) throws IOException {
        try(OutputStream ot = new FileOutputStream("d:/aaa/t.txt")) {
            String s = "hello";
            //转换为字节数组,存放到数组中
            byte[] b = s.getBytes();
            //数组b中的数据写入到输出流ot中
            ot.write(b);
            //将输出流中的缓冲区数据写入到文件中,确保数据被及时的写入文件
            ot.flush();
        }
    }

System.out.println()中out的源码public final static PrintStream out = null;我们可以传入自己的PrintStream来输出

public static void main(String[] args) throws IOException {
         //再写入之前要先打开文件,输出流对象会在打开文件之后,清空文件内容,所以我们可以追加,加个true即可
          try(OutputStream ot = new FileOutputStream("d:/aaa/t.txt",true)) {
              PrintStream printStream = new PrintStream(ot);
              printStream.println("hello");
              ot.flush();
          }
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值