当前位置: 首页 > 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();}}
}

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

http://www.xdnf.cn/news/421237.html

相关文章:

  • 构建媲美 ChatGPT 的 AI 交互界面—OpenWebUI
  • 大模型分布式光伏功率预测实现详解
  • Linux—进度条实现
  • 开源网络地图可视化第六章学习指南
  • 【unity游戏开发——编辑器扩展】使用MenuItem自定义菜单栏拓展
  • 【ArcGIS】根据shp范围生成系列等距点:范围外等距点+渔网点(Python全代码)
  • Android之横向滑动列表
  • ETL背景介绍_1:数据孤岛仓库的介绍
  • HTTP和HTTPS模块
  • 【计算机视觉】OpenCV实战项目:基于Tesseract与OpenCV的字符识别系统深度解析
  • Flask+HTML+Jquery 文件上传下载
  • 数据库优化
  • 第一章:HTML基石·现实的骨架
  • 《Effective Python》第2章 字符串和切片操作——深入理解Python 中的字符数据类型(bytes 与 str)的差异
  • ValueError: Caught ValueError in DataLoader worker process 0.
  • Postman启动时检测到版本不匹配错误
  • stm32之PWR、WDG
  • UE5通过C++实现TcpSocket连接
  • 在SQL Server中调整查询超时j解决方案
  • STM32 启动文件分析
  • 为何选择MCP?自建流程与Anthropic MCP的对比分析
  • docker大镜像优化实战
  • Landsat 5介绍
  • 【HCIA】浮动路由
  • 代码随想录算法训练营第六十三天| 图论9—卡码网47. 参加科学大会,94. 城市间货物运输 I
  • Springboot之类路径扫描
  • AI+可视化:数据呈现的未来形态
  • 小程序的内置组件
  • Docker与PostgreSQL
  • 自旋锁和CLH锁和AQS