File
路径
相对路径(推荐)
. 对应当前工作目录
.. 当前工作目录的上级目录
绝对路径
C:/a/b/c/1.txt
/bin/...
构造方法
//pathname 路径名字符串
public File(String pathname)
//parent 父路径
//child 子路径
public File(String parent, String child)
public File(File parent, String child)
创建操作
//创建新的普通文件, 成功为true, 失败false //false: (1)文件路径不合法 (2)文件已存在 (3)对应文件夹没有[写权限] public boolean createNewFile() throws IOException//创建目录, 成功true, 失败false //false: (1)同上 (2)文件夹已存在 (3)同上 public boolean mkdir()//创建/a/b/c多级目录, 成功true, 失败false 创建中间文件夹/中间路径文件夹 public boolean mkdirs()
移动操作
//srcFile.renameTo(destFile) //dest文件需要移动的目的地, 可以修改文件名字 public boolean renameTo(File dest)
删除操作
//删除对应文件/文件夹 成功true, 失败false // (1)直接删除(不进入回收站) (2)不能删除[非空文件夹] public boolean delete()//在[程序退出]时删除 // (1)同上 (2)同上 public void deleteOnExit()
查看相关信息
//获取文件/文件夹名
String getName();
//获取当前文件/文件夹的全路径
String getPath();//获取当前文件/文件夹的上级目录名称
String getParent();//获取当前路径对应的绝对路径字符串
String getAbsolutePath();//获取当前路径对应的绝对路径 File 对象
File getAbsoluteFile();//获取当前文件/文件夹最后修改时间,(时间戳)
long lastModified();//获取当前文件占用的空间字节数,如果是文件夹结果为 0L or 4096L
long length();
File file = new File("F:\\test\\aaa\\bbb\\ccc");
System.out.println(file.getName());
System.out.println(file.getPath());
System.out.println(file.getParent());
System.out.println(file.getAbsolutePath());
System.out.println(file.getAbsoluteFile());
System.out.println(file.lastModified());
System.out.println(file.length());
//如果是空文件夹:0L 如果是非空文件夹:4096L 如果是普通文件:字节长度
/*
控制台:
ccc
F:\test\aaa\bbb\ccc
F:\test\aaa\bbb
F:\test\aaa\bbb\ccc
F:\test\aaa\bbb\ccc
1691406923857
0
*/
判断方法
//判断 File 对象对应的文件/文件夹是否存在
boolean exists();
//判断 File 对象是否对应一个普通文件
boolean isFile();// 判断 File 对象是否对应一个文件夹
boolean isDirectory();//判断 File 对象是否采用绝对路径方式
boolean isAbsolute();//判断 File 对象对应的文件/文件夹是否为隐藏属性
boolean isHidden();
文件列表
//获取当前 File 对象对应文件夹中所有子文件和子文件夹名称 字符串数组
public String[] list();
//获取当前 File 对象对应文件夹中所有子文件和子文件夹 File 对象数组
public File[] listFiles();
文件名过滤器
@FunctionalInterface public interface FilenameFilter { boolean accept(File dir, String name); }
files集合存储以".java"为结尾的文件
File file = new File("F:\\test");
File[] files = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir, name).isFile() && name.endsWith(".java");
}
});
I/O
概述
java中通过io流实现设备之间的数据传输, io为input/output的缩写
分类
流向分类:
输入流Input 文件流向程序
输出流Output 程序流向文件
操作形式区分:
字节流InputStream/OutputStream 按照(字节)为操作单位,处理文件内容,适用所有的文件(图片视频)
字符流Reader/Writer 只可以处理使用【记事本】打开的可视化文本无乱码文件(操作的基本单元为Unicode码元)
对象流 一般用于序列化操作(此文章不做举例)
缓冲流\转换流等...
复制文件
利用缓冲流
try (
BufferedInputStream bis = new BufferedInputStream(Files.newInputStream(Paths.get("F:/test/22.txt")));
BufferedOutputStream bos = new BufferedOutputStream(Files.newOutputStream(Paths.get("F://test/33.txt")))
) {
byte[] buffer = new byte[1024 * 8];
int length = -1;
while ((length = bis.read(buffer)) != -1) {
bos.write(buffer, 0, length);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
API线上文档
java.io
java.nio.file
字节流和字符流的区别
参考地址:Java IO——字节流和字符流详解&区别对比_io字节流和字符流的区别_卜大爷的博客-优快云博客
字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。
字节流默认不使用缓冲区;字符流使用缓冲区。
字节流在操作的时候本身是不会用到缓冲区的,是与文件本身直接操作的,所以字节流在操作文件时,即使不关闭资源,文件也能输出;字符流在操作的时候是使用到缓冲区的。如果字符流不调用close或flush方法,则不会输出任何内容。
字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;字符流通常处理文本数据,它支持写入及读取Unicode码元。
字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以