【Java】文件读写和输入输出
程序员文章站
2022-06-19 19:15:45
输入/输出流,文件流,缓冲流,对象流,文件数据IO操作...
写在前面的话:
- 版权声明:本文为博主原创文章,转载请注明出处!
- 博主是一个小菜鸟,并且非常玻璃心!如果文中有什么问题,请友好地指出来,博主查证后会进行更正,啾咪~~
- 每篇文章都是博主现阶段的理解,如果理解的更深入的话,博主会不定时更新文章。
- 本文初次更新时间:2021.01.01,最后更新时间:2021.01.01
正文开始
1. 文件操作 - File
File
用来表示文件系统中的一个文件或目录。
使用 File 可以:
- 访问其表示的文件或目录的属性信息(名字,大小等信息)
- 创建或删除文件及目录
- 访问一个目录中的子项
但是File不能访问文件数据。
1.1 基本操作
关于File的一些基本操作:
- String getName()
获取文件名称- long length()
获取文件长度- boolean canRead()
判断文件是否可读,可读返回true- boolean canWrite()
判断文件是否可写,可写返回true- boolean isHidden()
判断文件是否隐藏,隐藏返回true
示例如下:
package file;
import java.io.File;
/**
* File用来表示文件系统中的一个文件或目录
* @author returnzc
*/
public class FileDemo {
public static void main(String[] args) {
//访问当前项目目录下的demo.txt文件
File file = new File("./demo.txt");
//获取名字
String name = file.getName();
System.out.println(name);
//获取长度(单位是字节)
long len = file.length();
System.out.println(len);
boolean cr = file.canRead();
boolean cw = file.canWrite();
System.out.println("可读:" + cr);
System.out.println("可写:" + cw);
boolean ih = file.isHidden();
System.out.println("是否隐藏:" + ih);
}
}
运行结果:
demo.txt
18
可读:true
可写:true
是否隐藏:false
1.2 创建、删除文件
判断文件或目录是否存在:
- boolean exists()
判断当前 File 表示的文件或目录是否已经存在,存在返回 true
创建文件:
- boolean createNewFile() throws IOException
创建新文件,需要处理异常
创建文件示例:
package file;
import java.io.File;
import java.io.IOException;
/**
* 使用File创建一个文件
* @author returnzc
*
*/
public class CreateNewFileDemo {
public static void main(String[] args) throws IOException {
//在当前目录下创建名为 test.txt 的文件
File file = new File("./test.txt");
if (!file.exists()) {
/*
* 创建该文件
* 需要注意,创建的文件所在的目录必须存在,否则会抛出异常。
*/
file.createNewFile();
System.out.println("文件已创建");
} else {
System.out.println("文件已存在");
}
}
}
删除文件、目录:
- boolean delete()
删除文件和目录。删除目录时只能删除空目录,非空目录需要挨个把所有子项都删掉才能删除。
删除文件:
package file;
import java.io.File;
/**
* 删除一个文件
* @author returnzc
*
*/
public class DeleteFileDemo {
public static void main(String[] args) {
/*
* 将当前项目目录下的test.txt文件删除
* 在相对路径中,"./"是可以忽略不写的,默认就是从当前目录开始的。
*/
File file = new File("./test.txt");
if (file.exists()) {
file.delete();
System.out.println("文件已删除");
} else {
System.out.println("文件不存在");
}
}
}
1.3 创建、删除目录
创建目录:
- boolean mkdir()
创建目录,要求创建的目录所在的父目录必须存在- boolean mkdirs()
创建多级目录,会将不存在的父目录一同创建出来
创建目录:
package file;
import java.io.File;
/**
* 创建一个目录
* @author returnzc
*
*/
public class MkDirDemo {
public static void main(String[] args) {
//在当前目录下创建一个名为 demo 的目录
File dir = new File("demo");
if (!dir.exists()) {
//创建该目录
dir.mkdir();
System.out.println("目录已创建");
} else {
System.out.println("目录已存在");
}
}
}
创建多级目录:
package file;
import java.io.File;
/**
* 创建一个多级目录
* @author returnzc
*
*/
public class MkDirsDemo {
public static void main(String[] args) {
//在当前目录下创建 a/b/c/d/e/f 目录
File dir = new File("a/b/c/d/e/f");
if (!dir.exists()) {
//mkdir()方法要求创建的目录所在的父目录必须存在
//mkdirs()方法则会将不存在的父目录一同创建出来
dir.mkdirs();
System.out.println("创建完毕!");
} else {
System.out.println("目录已存在!");
}
}
}
删除目录:
package file;
import java.io.File;
/**
* 删除目录
* @author returnzc
*
*/
public class DeleteDirDemo {
public static void main(String[] args) {
//将当前目录下的demo目录删除
File dir = new File("a");
if (!dir.exists()) {
//delete方法在删除目录时要求该目录必须是一个空目录
dir.delete();
System.out.println("目录已删除");
} else {
System.out.println("目录不存在");
}
}
}
1.4 其他操作
- boolean isDirectory()
判断是否为目录- boolean isFile()
判断是否为文件- File[] listFiles()
列出所有文件
列出指定目录的所有文件:
package file;
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
File dir = new File(".");
File[] subs = dir.listFiles();
System.out.println(subs.length);
for (int i = 0; i < subs.length; i++) {
System.out.println(subs[i].getName());
}
}
}
运行结果:
6
.classpath
.project
.settings
bin
demo.txt
src
获取一个目录中的所有子项:
package file;
import java.io.File;
/**
* 获取一个目录中的所有子项
* @author returnzc
*
*/
public class ListFilesDemo {
public static void main(String[] args) {
//获取当前目录中的所有子项
File dir = new File(".");
if (dir.isDirectory()) {
File[] subs = dir.listFiles();
for (int i = 0; i < subs.length; i++) {
System.out.println(subs[i].getName());
}
}
}
}
删除文件或目录(递归调用):
package file;
import java.io.File;
/**
* 完成方法,实现将给定的File对象表示的文件或目录删除
* @author returnzc
*
*/
public class DeleteTestDemo {
public static void main(String[] args) {
File dir = new File("a");
delete(dir);
}
public static void delete(File f) {
if (f.isDirectory()) {
//先将该目录清空
File[] subs = f.listFiles();
for (int i = 0; i < subs.length; i++) {
File sub = subs[i];
//先删除当前子项
delete(sub);
}
}
f.delete();
}
}
1.5 文件过滤器
重载的ListFiles
方法允许我们传入一个文件过滤器(作为参数),然后将目录中满足过滤器要求的子项返回。
文件过滤器是一个接口,如果用的话要实现类:
class MyFilter implements FileFilter {
public boolean accept(File file) {
String name = file.getName();
return name.startsWith(".");
}
}
示例:
package file;
import java.io.File;
import java.io.FileFilter;
/**
* 重载的ListFiles方法,允许我们传入一个文件过滤器
* 然后将目录中满足过滤器要求的子项返回
*/
public class FileDemo {
public static void main(String[] args) {
/*
* 获取当前目录下所有文字以"."开头的子项
*/
File dir = new File(".");
/*
* FileFilter 文件过滤器
*/
MyFilter filter = new MyFilter();
File[] subs = dir.listFiles(filter);
System.out.println(subs.length);
for (int i = 0; i < subs.length; i++) {
System.out.println(subs[i].getName());
}
}
}
class MyFilter implements FileFilter {
public boolean accept(File file) {
String name = file.getName();
System.out.println("正在过滤:" + name);
return name.startsWith(".");
}
}
运行结果:
正在过滤:.classpath
正在过滤:.project
正在过滤:.settings
正在过滤:bin
正在过滤:demo.txt
正在过滤:src
3
.classpath
.project
.settings
可以用匿名内部类:
/*
* FileFilter 文件过滤器
*/
FileFilter filter = new FileFilter() {
public boolean accept(File file) {
String name = file.getName();
System.out.println("正在过滤:" + name);
return name.startsWith(".");
}
};
能少写就少写:
File[] subs = dir.listFiles(new FileFilter() {
public boolean accept(File file) {
String name = file.getName();
System.out.println("正在过滤:" + name);
return name.startsWith(".");
}
});
JDK8
后有lambda表达式
:
File[] subs = dir.listFiles((file)->{
String name = file.getName();
System.out.println("正在过滤:" + name);
return name.startsWith(".");
}
});
简化为:
File[] subs = dir.listFiles(
(file)->file.getName().startsWith(".")
);
2. RandomAccessFile
3. 基本 IO 操作
4. 文件数据 IO 操作
占个坑,不要急,正在写~~
参考
相关文章
本文地址:https://blog.csdn.net/newcong0123/article/details/111570805