当前位置: 首页 > news >正文

文件操作: File 类的用法和 InputStream, OutputStream 的用法

目录

1. File 概述

1.1 File的属性 

1.2 File的构造方法 

1.3 File的方法

2. 文件的基本操作

2.1 InputStream

2.2 OutputStream 

2.3.字符流读取(Reader)

2.4 字符流写(Writer)


1. File 概述

Java 中通过 java.io.File 类来对⼀个文件(包括目录)进行抽象的描述。注意,有 File 对象, 并不代表真实存在该文件。 

1.1 File的属性 

1.2 File的构造方法 

1.3 File的方法

使用示例 

getParent(),getName(),getPath(),getAbsolutePath(),getCanonicalPath() 

import java.io.File;
import java.io.IOException;public class Demo {public static void main(String[] args) throws IOException {File file = new File("D:/Java/test.txt");System.out.println(file.getName()); //获取文件名字System.out.println(file.getParent());  //获取文件的父目录System.out.println(file.getPath());   //获取文件路径System.out.println(file.getAbsolutePath()); //获取文件的绝对路径System.out.println(file.getCanonicalPath());  //获取文件的规范路径}
}

exists(),isDirectory(),isFile(),createNewFile() 

createNewFile(): 根据 File 对象,自动创建⼀个空文件。成功创建后返回 true

import java.io.File;
import java.io.IOException;public class Demo2 {public static void main(String[] args) throws IOException {File file = new File("D:/Java/test.txt");System.out.println(file.exists());System.out.println(file.isFile());System.out.println(file.isDirectory());boolean ret = file.createNewFile();System.out.println("ret = " + ret);System.out.println(file.exists());System.out.println(file.isFile());System.out.println(file.isDirectory());}
}

delete(),deleteOnExit()

delete():根据 File 对象,删除该文件。成功删除后返回 true 

import java.io.File;public class Demo3 {public static void main(String[] args) throws InterruptedException {File file = new File("D:/Java/test.txt");boolean ret = file.delete();System.out.println("ret = " + ret);}
}

deleteOnExit():根据 File 对象,标注文件将被删除,删除动作会到 JVM 运⾏结束时才会进行 。

public static void main(String[] args) throws InterruptedException {File file = new File("D:/Java/test.txt");      //等程序结束后再删除文件file.deleteOnExit();Thread.sleep(3000);}

list(),listFiles()

list():返回 File 对象代表的目录下的所有文件名 

public class Demo4 {public static void main(String[] args) {File file = new File("D:/Java/");String[] files = file.list();System.out.println(Arrays.toString(files));}
}

listFiles():返回 File 对象代表的目录下的所有件,以 File 对象表示 。

public class Demo4 {public static void main(String[] args) {File file = new File("D:/Java/");File[] files = file.listFiles();System.out.println(Arrays.toString(files));}
}

 mkdir(),mkdirs()

mkdir():创建 File 对象代表的目录 

public class Demo5 {public static void main(String[] args) {File file = new File("D:/Java/aaa");boolean ret = file.mkdir();System.out.println(ret);}
}

mkdirs():创建 File 对象代表的目录,如果必要,会创建中间目

public class Demo5 {public static void main(String[] args) {File file = new File("D:/Java/aaa/bbb/ccc/ddd");boolean ret = file.mkdirs();System.out.println(ret);}
}

 renameTo(File dest):进行文件改名,也可以视为我们平时的剪切、粘贴操作

修改文件名:

public class Demo5 {public static void main(String[] args) {File src = new File("./test.txt");File dest = new File("./test2.txt");boolean ret = src.renameTo(dest);//重命名和移动目录System.out.println(ret);}
}

修改路径: 

public static void main(String[] args) {File src = new File("./test2.txt");File dest = new File("./aaa/test2.txt");boolean ret = src.renameTo(dest);//重命名和移动目录System.out.println(ret);}

2. 文件的基本操作

文件的读写,针对文本文件JAVA提供了一组类,称为字符流(典型代表 Reader(输入流),Writer (输出流)) 读写的基本单位是字符~

针对二进制文件 提供了一组类 称为字节流(典型代表 inputStream,(输入流)OutputStream( 输出流))  读写的基本单位是字节~

2.1 InputStream

基本方法: read() :读取一个字节的数据,返回-1代表读取完毕
read(byte[] b)  :最多读取b.lenth的字节的数据到b,返回实际读到的数量,-1代表读取完毕
read(byte[] b, int off, int len)  :最多读取,len-off 字节的数据到b 中,放在从off开始的下标 -1代表读取完毕
由于inputStream是个抽象类,不能直接实例化,里面的类有很多,这里我们只用文件操作,使用 FileInputStream 来实例化~

public class IODemo6 {//事先在目录中准备了文件,内容为abcpublic static void main(String[] args) throws IOException {   //使当前对象和硬盘上的文件关联起来try(InputStream inputStream=new FileInputStream("d:/test.txt")) {  //相当于打开文件,如果不存在就抛出异常while (true) {                              //try代码块的作用可以在代码块结束的时候自动执行close操作int ret = inputStream.read();  //读取文件,一次读取一个字节,一直到文件读取结束返回-1  这里使用int接收if (ret == -1) {                 // (需要-1来确定是否读取完)break;}System.out.printf("%s\n",ret);}}
//        inputStream.close();  //有打开就要有关闭操作~  如果不关闭,文件描述符如果超出上限就会发生严重BUG}
}

2.2 OutputStream 

为字节流写操作~
方法:
wirte(int b):写入要给字节的数据
write(byte[] b) :将字节数组b的所有内容全部写入
write(byte[] b, int off, int len):将b这个数组从off开始写,一共写入len个
flush() :刷新操作,将数据刷入到设备中
写入abc~ 

import java.io.*;public class Demo6 {public static void main(String[] args) {try(OutputStream outputStream=new FileOutputStream("d:/test.txt")){outputStream.write(97);   //一个字节一个字节的写入文件outputStream.write(98);outputStream.write(99);outputStream.flush();} catch (IOException e) {e.printStackTrace();}}
}

2.3.字符流读取(Reader)

使用方法和上面的方法一样~ 这里就直接写入代码~

import java.io.*;public class Demo6 {public static void main(String[] args) {try(Reader reader=new FileReader("d:/test.txt")){  //try可以自动closewhile (true){int ret=reader.read();if(ret==-1){break;}char ch=(char)ret;System.out.println(ch);}} catch (IOException e) {e.printStackTrace();}}
}

代码基本是一样的,就是读取的单位变成了一次读取一个字符~

2.4 字符流写(Writer)

import java.io.*;public class Demo6 {public static void main(String[] args) {try(Writer writer=new FileWriter("d:/text.txt")){writer.write("abdc");  //字符流输入writer.write("efg");writer.write("hig");} catch (IOException e) {e.printStackTrace();}}
}

 这样就可以实现字符流写入了~。

相关文章:

  • 基于SSM实现的健身房系统功能实现十六
  • 操作系统导论——第29章 基于锁的并发数据结构
  • 代理IP的核心原理:从请求转发到匿名性实现
  • 如何界定合法收集数据?
  • 消息~组件(群聊类型)ConcurrentHashMap发送
  • 嵌入式学习笔记 - 头文件重复包含问题
  • React百日学习计划——Deepseek版
  • C++ 基础知识
  • Codeforces Round 997 (Div. 2)
  • JAVA实战开源项目:乐享田园系统 (Vue+SpringBoot) 附源码
  • Nesa测试网 验证者节点部署教程
  • Java后端开发day48--反射动态代理
  • Easysearch 时序数据的基于时间范围的合并策略
  • 2025年5月13日第一轮
  • 深入浅出MySQL 8.0:新特性与最佳实践
  • 2025年大一ACM训练-二分
  • TCP协议详细讲解及C++代码实例
  • 欧拉计划 Project Euler 71(有序分数)题解
  • OPC UA 协议介绍
  • Antd中Form详解:
  • 食用城市|食饭识人
  • 火车站员工迟到,致出站门未及时开启乘客被困?铁路部门致歉
  • 第1现场 | 印巴停火次日:当地民众逐渐恢复正常生活
  • 人民日报整版聚焦:专家学者看2025中国经济增长点
  • 演员发文抵制代拍获粉丝支持,媒体:追星“正确姿势”不妨多来点
  • 上海“量子城市”先导应用场景落地曹杨社区,提供哪些服务?