java文件操作和IO流入门级教程_文件操作
大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流
作者简介:
- CSDN java领域新星创作者blog.csdn.net/bug…
- 掘金LV3用户 juejin.cn/user/bug…
- 阿里云社区专家博主,星级博主,developer.aliyun.com/bug…
- 华为云云享专家 bbs.huaweicloud.com/bug…
java文件操作
我们java
提供了一个File
类,在java.io
包下,我们通过这个类就可以完成对文件的操作,首先这个文件对象就描述了一个文件/目录,就可以实现很多功能!
File
文件和目录路径名的抽象表示。
文件系统相关的操作
文件系统相关的操作也就是我们看到的文件系统所具有的操作文件的功能,我们通过java
代码也能实现!
这里可执行的功能,我们通过java
代码也都可以实现!
例如:打开文件,删除文件,查看文件大小,日期…一系列关于文件的操作我们都可以进行!
我们java
有一组文件操作的API
通过上述的方法就可以对文件进行管理!
我们来演示几个常用的方法:
package file;
import java.io.File;
import java.io.IOException;
public class File1 {
public static void main1(String[] args) {
//我们创建一个File对象,传入路径
File file1 = new File("D:/1.txt");
File file2 = new File("D:/test.txt");
//判断该文件是否存在!
System.out.println(file1.getName()+"是否存在:"+file1.exists());
System.out.println(file2.getName()+"是否存在:"+file2.exists());
}
public static void main(String[] args) {
File file = new File("D:/test.txt");
System.out.println("是否可读:"+file.canRead());
System.out.println("是否可写"+file.canWrite());
System.out.println(file.isDirectory());
System.out.println("路径:"+file.getAbsolutePath());
System.out.println("路径:"+file.getPath());
System.out.println("是否为目录文件:"+file.isDirectory());
System.out.println("父目录路径:"+file.getParent());
System.out.println("父目录文件:"+file.getParentFile());
//在D盘下创建 4_22.txt文件!
//只是创建了一个文件对象!在硬盘中并没有文件!
File newFile = new File("D:/4_22.txt");
try {
//在硬盘中创建该文件!
newFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("文件:"+newFile.getName());
System.out.println("文件大小:"+newFile.length());
System.out.println("删除文件:"+newFile.delete());
System.out.println("文件是否存在:"+newFile.exists());
}
}
我们D
盘下并没有1.txt
文件,所以文件不存在!
我们通过文件对象File
调用createNewFile()
方法,就可以真正的在我们的计算机中创建该文件!
//创建目录文件!
public static void main(String[] args) {
//创建目录!
File file = new File("./aaa");
// 创建一级目录 mkdir 方法!
file.mkdir();
System.out.println(file.isDirectory());
// 创建多级目录 mkdirs 方法!
File file1 = new File("../aaa/bbb/ccc");
file1.mkdirs();
System.out.println(file1.isDirectory());
}
在该项目的父目录路径下创建一个目录文件!
在该项目下创建一个目录文件!
还有很多关于文件系统相关的操作,大家可以阅读java
的API
进行学习!!!
点击查看javaAPI
文件内容相关的操作
文件内容相关的操作,就是对文件内容进行读写操!
我们也是通过java
中的API
进行学习!
我们java
提供了两种对文件操作读取的方案!
- 字符流: 以字符为单位进行读取!
- 文件流: 以字节为单位进行读取!
这里的字节流和字符流就对应了我们的二进制文件和字符文件的读取
什么是流呢?
就好比水流,我们将文件的读取抽象成了水流!
- 输入流: 就好比你在喝水,文件读取的过程!
- 输出流:就好比你在输出知识,文件删除的过程!
分类 | 抽象类读(子类) | 抽象类写(子类) |
---|---|---|
字节流 | InputStream (FileInputStream) |
OutputStream (FileOutputStream) |
字符流 | Reader (FileReader) |
Writer (FileReader) |
我们通过这个表格就可以对字符流和字节流的读取进行区分!
我们会详细学习这些读取类!
字节流
字节流:就是以字节为单位,一次读写一个或多个字节!
读操作
如果我们要对一个文件进行读操作,都要进行那些步骤呢?
- 打开文件
- 进行读操作
- 关闭文件
我们通过下面案例对字节流读取进行学习!
//字节流读操作!
import java.io.*;
public class File2 {
public static void main(String[] args) throws IOException {
//输入操作,也就是读文件(学习读书过程就是输入)
File file = new File("./hello.txt");
//输入流,打开文件!
InputStream inputStream = new FileInputStream(file);
byte[] result = new byte[1024];
//byte数组用来存放读取结果
while (true){
int len = inputStream.read(result);//保存了有效字节数!
if(len==-1){//读取完成!
break;
}
for (int i = 0; i <len; i++) {//将结果打印!
System.out.print((char)result[i]);
}
}
//关闭文件!
inputStream.close();
}
}
hello.txt
文件:
读取结果:
FileInputStream
用于读取诸如图像数据的原始字节流!
构造方法:
我们这里的字节流读操作,用到了read
方法!
下面3个read
方法都是对输入流进行读操作!
int read()
从该输入流读取一个字节的数据。
无参方法read()
,默认读取一个字节,返回值是一个整型int
!
为啥不是返回一个byte型呢?
我们知道byte
范围是-128~127
而我们规定当返回值为-1
就表示读取到文件末尾!
如果这样就冲突了!
所以这里的返回值是int
一个字节的范围是 0~255
int read(byte[] b)
从该输入流读取最多b.length
个字节的数据为字节数组。
我们通过byte
数组,去接收读取的结果!
而这里的返回值是读取到的有效字节个数!
返回-1
就是读取结束!
int read(byte[] b, int off, int len)
从该输入流读取最多 len`字节的数据为字节数组。
和上面的读取操作类似!
这里的b
字节数组存放读取内容时,是从off
数组下标开始,一次最多可以读取len
长度的字节!
而返回值是读取到有效字节数!
输出流写操作
写文件也是类似的步骤!
- 打开文件
- 进行写操作
- 关闭文件
我们先看一个案例:
//字节流写操作
public static void main(String[] args) throws IOException {
//输出操作,也就是写文件(学习做题,写博客过程就是输出)
File file = new File("./4_22.txt");
//打开文件!
OutputStream outputStream = new FileOutputStream(file);
//我们将string字符串写入 file文件!
String string = "hello world!";
//我们要通过字节方式进行写操作!
outputStream.write(string.getBytes());
System.out.println("写入成功!");
//关闭流文件!
outputStream.close();
}
FileOutputStream
用于写入诸如图像数据的原始字节流。 对于写入字符流,请考虑使用FileWriter 。
我们输出流写操作,主要通过write
方法进行!
void write(byte[] b)
将 b.length个字节从指定的字节数组写入此文件输出流。void write(byte[] b, int off, int len)
将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。void write(int b)
将指定的字节写入此文件输出流。
这里的write
和read
类似!
这里是将b
数组里的内容写到file
文件!
注意:
这里每次打开文件进行写操作,都会将文件内容置空,再进行写操作!如果并不存在此文件,就会创建改文件!
如果我们要从文件末尾开始写操作呢?
//追加写入操作!
public static void main(String[] args) throws IOException {
//输出操作,也就是写文件(学习做题,写博客过程就是输出)
File file = new File("./4_22.txt");
//打开文件!
//true可追加!默认不可追加!
OutputStream outputStream = new FileOutputStream(file,true);
//我们将string字符串写入 file文件!
String string = "hello world!";
//我们要通过字节方式进行写操作!
outputStream.write(string.getBytes());
System.out.println("追加写入成功!");
//关闭流文件!
outputStream.close();
}
我们需要在创建输出流对象时通过构造方法传参设置是否可追加!
字符流
字符流:就是以字符为单位,一次读取一个或多个字符!
- 点赞
- 收藏
- 关注作者
评论(0)