【Java】File 文件

article/2025/9/23 20:51:26

文件操作

File 类

属性

修饰符及类型属性说明
static StringpathSeparator路径分隔符,String 类型表示
static charpathSeparator路径分隔符,char 类型表示

构造方法

方法签名说明
File(File parent, String child)根据父目录 File 对象 + 孩子路径,创建 File 对象
File(String pathname)根据文件的绝对路径或相对路径创建 File 对象
File(String parent, String child)根据父目录路径 + 孩子路径,创建 File 对象

方法

修饰符及返回类型方法签名说明
StringgetParent()返回 File 对象的父目录路径
StringgetName()返回 File 对象的待后缀文件名称
StringgetPath()返回 File 对象的文件路径
StringgetAbsolutePath()返回 File 对象的绝对路径
StringgetCanonicalPath()返回 File 对象修饰过的绝对路径
booleanexists()判断 File 对象描述的文件是否存在
booleanisDirectory()判断 File 对象代表的文件是否是一个目录
booleanisFile()判断 File 对象代表的文件是否是一个文件
booleancreateNewFile()根据 File 对象的描述,创建对应文件,创建成功返回 true
booleandelete()

根据 File 对象的描述,删除对应文件,删除成功返回 true

voiddeleteOnExit()根据 File 对象的描述,将对应文件标注为待删除,在 JVM 运行结束时执行删除
String[]list()返回 File 对象代表的目录下所有文件的文件名
File[]listFiles()返回根据 File 对象代表的目录下所有文件所构造的所有对应的 File 对象
booleanmkdir()创建 File 对象代表的目录,无法进行多层目录创建
booleanmkdirs()创建 File 对象代表的目录,可以进行多层目录创建
booleanrenameTo(File dest)进行文件改名,也可以修改路径
booleancanRead()判断用户是否有可读权限
booleancanWrite()判断用户是否有可写权限

get 方法的使用

public class Test {public static void main(String[] args) throws IOException {File file = new File("../test.txt");System.out.println("所处目录名 " + file.getParent());System.out.println("文件名 " + file.getName());System.out.println("路径 " + file.getPath());System.out.println("绝对路径 " + file.getAbsolutePath());System.out.println("经过处理的绝对路径 " + file.getCanonicalPath());}
}

运行结果

c2d67fc2555440f2b1e3aa29fa65374f.png

文件创建删除

public class Test {public static void main(String[] args) throws IOException {File file = new File("test.txt");System.out.println("是否存在 " + file.exists());System.out.println("是否为文件夹 " + file.isDirectory());System.out.println("是否为文件 " + file.isFile());System.out.println();System.out.println("使用 createNewFile() 创建文件");System.out.println(file.createNewFile());System.out.println();System.out.println("是否存在 " + file.exists());System.out.println("是否为文件夹 " + file.isDirectory());System.out.println("是否为文件 " + file.isFile());System.out.println();System.out.println("使用 delete() 删除文件");System.out.println(file.delete());System.out.println();System.out.println("是否存在 " + file.exists());System.out.println("是否为文件夹 " + file.isDirectory());System.out.println("是否为文件 " + file.isFile());}
}

运行结果

5b431ca103dc40629148cf79f4f5b228.png

文件读写

InputStream

方法

修饰符及返回类型方法签名说明
intread()读取一个字节的数据,当内容读完后再读将返回 -1
intread(byte[] b)最多读取 b.length 字节的数据到 b 中,返回读到的字节数,返回 -1 表示文件读完
intread(byte[] b, int off, int len)读取 len 个字节,最多读取 b.length - off 个字节,数据从 b[off] 开始储存,返回 -1 表示文件读完
voidclose()关闭字节流输入

InputStream 是一个抽象类,需要使用实现类来调用具体方法,我们这里需要文件相关的Input Stream 实现类 —— FileInputStream 类

FileInputStream

构造方法

方法签名说明
FileInputStream(File file)利用 File 对象构造文件输入流 FileInputStream 对象
FileInputStream(String name)利用文件路径构造文件输入流 FileInputStream 对象

使用 read() 一个一个字节读取

public class Test {public static void main(String[] args) throws IOException {// test.txt 与 src 在同一层中// test.txt 内容为 test// 使用 try-with-resources 语句打开 FileInputStream 资源// try 语句执行完毕后 自动释放 FileInputStream 资源try (InputStream inputStream = new FileInputStream("test.txt")) {// 使用 read() 一个一个字节的读取直到文件读取结束while (true) {int b = inputStream.read();if (b == -1) {// 当 read() 返回 -1// 文件读取完毕,break 退出循环break;}// 将每次读取到的字节值以字符形式输出System.out.printf("%c", b);}}}
}

运行结果

ffae4d8957564521bf428c73b63073a1.png

e050bc38404940e2ab70975d7a9cc194.png

cebdc74535b443a4893639f49f6e3a13.png  

bb0ff1904bab454d8cc6576d277fe11e.png

使用 read(byte[] b) 一次读取所有字节

public class Test {public static void main(String[] args) throws IOException {// test.txt 与 src 在同一层中// test.txt 内容为 test// 使用 try-with-resources 语句打开 FileInputStream 资源// try 语句执行完毕后 自动释放 FileInputStream 资源try (InputStream inputStream = new FileInputStream("test.txt")) {byte[] bytes = new byte[4];while (true) {int len = inputStream.read(bytes);if (len == -1) {// 当 read() 返回 -1// 文件读完break;}for (int i = 0; i < len; i++) {System.out.printf("%c", bytes[i]);}}}System.out.println();}
}

运行结果

dc9b58011c98454c8b7fede39008906a.png

注意:由于中文字符的编码原因,一个字节并不能对应一个字符,使用这种方法读取中文需要将 bytes 数组使用 String 类的构造方法 String(byte bytes[], int offset, int length, String charsetName)  将 bytes[] 转换为字符串 (UTF-8  的一个字符大小为 3 个字节)

for (int i = 0; i < len; i+=3) {String s = new String(bytes, i, 3, "UTF-8");System.out.print(s);
}

运行结果

3836b22819be44c390819adc88bcd86f.png

Scanner

构造方法

构造方法说明
Scanner(InputStream inputStream, String charset)使用 charset 字符集进行 inputStream 的扫描读取

代码实现

public class Test {public static void main(String[] args) throws IOException {try (InputStream inputStream = new FileInputStream("test.txt")) {try (Scanner scanner = new Scanner(inputStream, "UTF-8")) {while (scanner.hasNext()) {String s = scanner.next();System.out.print(s);}}}}
}

运行结果

4026777fb15a4e19b23c964ea8a915a6.png

OutputStream

方法

修饰符及返回值类型方法签名说明
voidwrite(int b)写入要给的字节数据
voidwrite(byte[] b)将字节数据中的数据全部写入
intwrite(byte[] b, int off, int len)写入字节数组中从 off 开始的 len 个字节数据
voidclose()关闭字节流
voidflush()刷新缓冲区

缓冲区:对程序来讲 I/O 速度是比较慢的。因此为了减少 I/O 次数,写数据的时候会先将数据写入到一个指定的缓冲区中。缓冲区满了或是满足了某些特定条件的时候,将缓冲区的数据一次性写入到目标中,大大减少 I/O 次数。但可能就会出现写入数据时,数据写入到缓冲区中了,但不满足条件,没有写入真正的目的地,数据被遗留在了缓冲区中。所以我们有时需要使用 flush() 刷新缓冲区,强行将缓冲区的数据写到目的地中

OutputStream 同样是一个抽象类,所以我们应该使用 FileOutputStream 类

OutputStreamWriter

一个一个字节写入

public class Test {public static void main(String[] args) throws IOException {try (OutputStream outputStream = new FileOutputStream("test.txt")) {outputStream.write('H');outputStream.write('e');outputStream.write('l');outputStream.write('l');outputStream.write('o');outputStream.flush();}}
}

运行结果

42287e7e126042e7b99615a5dfa990a4.png

字节数组写入

public class Test {public static void main(String[] args) throws IOException {try (OutputStream os = new FileOutputStream("test.txt")) {byte[] b = new byte[]{(byte) 'G', (byte) 'o', (byte) 'o', (byte) 'd'};os.write(b);os.flush();}}
}

运行结果

b982e104e0464281bb5c251994e8a4d3.png

使用字符串写入

public class Test {public static void main(String[] args) throws IOException {try (OutputStream outputStream = new FileOutputStream("test.txt")) {String s = "Hello 世界";byte[] b = s.getBytes(StandardCharsets.UTF_8);outputStream.write(b);outputStream.flush();}}
}

运行结果

506c29d16b884f54bbc8978a369ad1f7.png

PintWriter

PintWriter 类的对象,提供了几种我们比较熟悉的输出方法,包括 print/println/printf

public class Test {public static void main(String[] args) throws IOException {try (OutputStream outputStream = new FileOutputStream("test.txt")) {OutputStreamWriter osWriter = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8);PrintWriter writer = new PrintWriter(osWriter);writer.print("Hello ");writer.println("你好");writer.printf("%s: %d\n", "一百", 100);writer.flush();}}
}

运行结果

3137ba37b6dd475c9523f53c7ccaf489.png


http://chatgpt.dhexx.cn/article/p0CDZntT.shtml

相关文章

java文件如何运行

.java文件先用 javac 进行编译&#xff0c;生成 .class文件&#xff0c;在用 java 生成结果 .java&#xff08;源文件&#xff09;.class&#xff08;字节码文件&#xff09; 1.在Sublime中&#xff1a;新建文件&#xff0c;另存为 D:\javacode\Hello.java //这是java的快速入…

Java指令编译java文件

Java指令编译java文件 1. 进入cmd2. 编译2.1 切换不同JDK编译文件 3. 运行 1. 进入cmd 如何快速进入/打开cmd–快捷键 在源代码目录输入cmd&#xff0c;然后回车 2. 编译 如果出现错误: 编码 GBK 的不可映射字符 (0x8D) 需要在javac 后面加上 -encoding UTF-8 javac -enco…

Java File文件操作

Java提供File类&#xff0c;让我们对文件进行操作&#xff0c;简单整理了一下File类的用法。 1.基本概念 File&#xff1a;文件和目录路径名的抽象表示形式&#xff0c;代表文件或者文件夹。 2.构造方法 // 根据parent抽象路径名和child路径名字符串创建一个新File实例File(F…

Java 文件基本技术 文件概述

这里写目录标题 13.1 文件概述13.1.1 基本概念和常识1.二进制思维2.文件类型3.文本文件的编码4.文件系统5.文件读写 13.1.2 Java文件概述1.流2.装饰器设计模式3.Reader/Writer4.随机读写文件5.File6.NIO7.序列化和反序列化 参考目录 13.1 文件概述 在本节&#xff0c;我们主要介…

Java文件操作

文章目录 1、文件的基本概念2、java文件操作2.1 File概述2.2 InputStream 和 FileInputStream2.3 OutputStream 和 OutputStreamWriter 1、文件的基本概念 平时说的文件一般都是指存储在硬盘上的普通文件&#xff0c;形如txt&#xff0c;jpg&#xff0c;mp4&#xff0c;rar等这…

Java 文件操作

Java 文件操作 引言1. 对文件的初步认识2. 绝对路径和相对路径 一、File 类File 类对应的方法创建一个文件测试一测试二测试三测试四测试五( 面试题 )测试六测试七 二、InputStream测试一try with resources 语法测试二测试三 三、OutputStream测试一测试二总结 四、案例案例1…

java文件

File File创建 1.根据路径构建FileFile file new File("d:\\1.txt");2.根据父目录文件子路径构建文件File parentFile new File("d:\\");String fileName "2.txt";File file new File(parentFile, fileName);3.父目录子路径构建String pare…

Java文件操作(超详细+代码示例)

Java文件操作 一、Java.io包1.1 File类1.2 Stream流&#xff08;字节流&#xff09;1.2.1 使用FileInputStream类1.2.2 使用FileOutputStream类1.2.3 小总结 1.3 Stream流&#xff08;字符流&#xff09;1.3.1 FileWriter类 与 BufferedWriter类使用1.3.2 FileReader类 与 Buff…

二、八大数据类型

在Java中有八种基本数据类型来存储数值、字符和布尔值&#xff1a; 2.1 整数型 整数型有byte(字节)、short(短整型)、int(整型)、long(长整型)四种。&#xff08;说明&#xff1a;可使用L或l后缀来声明长整型数值&#xff09; 以0开始的数值被解释为8进制数值&#xff1b;以…

Java 八大基本数据类型简述

java 的基本数据类型关系图 1、取值范围 类型默认值占用存储空间/字节范围byte01-127~128(-2的7次方到2的7次方-1)short02-32768~32767(-2的15次方到2的15次方-1)int04-2147483648~2147483647(-2的31次方到2的31次方-1)long08-9223372036854774808~9223372036854774807(-2的63次…

Java基础(一) 八大基本数据类型

自从Java发布以来&#xff0c;基本数据类型就是Java语言的一部分&#xff0c;分别是***byte, short, int, long, char, float, double, boolean***. 其中&#xff1a; 整型&#xff1a;byte, short, int, long 字符型&#xff1a;char 浮点型&#xff1a;float, double 布…

Java 中的八大基本数据类型、类型转换

目录 1. ♥常见的数据类型 2. ♥引用数据类型 3. ♥类型转换 4. ♥数值提升 5. ♥int 和 String 之间的相互转换 1. 基本数据类型 八大基本数据类型&#xff1a; 整型&#xff1a;byte、short、int、long浮点型&#xff1a;double&#xff08;双精度浮点型&#xff09;、…

Java基础:Java八大基本数据类型

一、背景。 这篇文章主要介绍了Java八大数据类型详细教程,本文通过图文并茂的形式给大家介绍的非常详细&#xff0c;对大家的学习或工作具有一定的参考借鉴价值&#xff0c;需要的朋友可以参考下。放假在家里休息&#xff0c;闲来无事&#xff0c;想巩固巩固自己的基础知识。J…

Java八大基本数据类型

前言&#xff1a;做一下笔记。 1.Java基本数据类型图 2.Java基本数据类型 整数类型&#xff1a;byte&#xff0c;1字节&#xff0c;8位&#xff0c;最大存储数据量是255&#xff0c;存放的数据范围是-128~127之间。整数类型&#xff1a;short&#xff0c;2字节&#xff0c;16…

好用网站推荐

说明 整理一下常用的网站&#xff0c;其中包括学习、素材、教学视频、一些优秀的论坛等网站&#xff0c;并推荐给大家大家按需获取 首先推荐一些非常好的网站&#xff0c;网站百度就能搜到&#xff1a;知乎&#xff0c;轻单&#xff0c;果壳&#xff0c;花瓣&#xff0c;电子发…

c++好用的网站

目录 洛谷www.luogu.com.cn 有道小图灵https://oj.youdao.com/csp 维基https://oi-wiki.org/ 信奥赛一本通http://ybt.ssoier.cn:8088/index.php 1&#xff0c;洛谷 他的网址是www.luogu.com.cn。 这是一个好用的刷题网站&#xff0c;题库里有大约有2000多道题。 洛谷有题…

有哪些好用的搜索引擎网站推荐?

分享一些私藏已久的搜索引擎&#xff0c;个个都十分强大&#xff0c;一起来看看吧&#xff01; 01.秘迹搜索 这是一款无敌有良心、无敌安全的搜索引擎&#xff0c;不会收集私人信息&#xff0c;保护私隐&#xff0c;没有Cookie&#xff0c;并且秘迹搜索聚合了百度、360、Bing…

分享一些冷门好用的网站和软件

分享一&#xff1a;UZER UZER是一个功能强大的云端应用空间&#xff0c;可以帮助您将所有的文件和应用程序都集中在一个地方&#xff0c;让您随时随地轻松访问。 以下是它的主要特点&#xff1a; 云存储&#xff1a;UZER提供大量的云存储空间&#xff0c;让您可以安全地存储…

网站分享:7个非常好用的电子书网站

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、 C#、 Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&…

推荐几个好用的网站导航

1、爱达杂货铺 里面包含很多网站的导航&#xff0c;是我感觉我用过最好的导航网站了&#xff08;里面的网站有些是访问不了的&#xff09; 2、不求人影视导航 该网站里面有各种影视网站的地址集合&#xff0c;还有动漫、美剧。。。。。 3、龙轩导航 界面简洁&#xff0c;集合…