文件操作(IO操作)

目录

一、文件

二、Java中操作文件(File)

构造方法

常用方法

三、文件内容读写(IO流)

io流

1、InputStream

FileputStream

2、OutputStream

FileOutputStream


一、文件

1、包含数据本身内容+metadata(文件的头信息:文件名、修改时间、文件大小等)

2、文件系统结构

3、文件路径

  • 绝对路径:从根节点到叶子节点的整个路径(windows从磁盘开始)

  • 相对路径:从任意一个结点出发,到目的节点,经过的路径

4、文件划分

  • 文本文件:被字符集编码的文本
  • 二进制文件:按照标准格式保存的非字符集编码的文本

需要保证保存文件和打开文件的编码格式一致,否则就会乱码。

java中文本是string,可以使用getbytes("编码格式")返回byte[];

java中的二进制数据byte[],也可以转换为文本,使用new String(bytes)或new String(bytes,"编码格式").

二、Java中操作文件(File)

构造方法

方法 说明
File(String pathname) 根据文件路径创建一个新的File,可以是相对路径也可以是绝对路径

常用方法

返回值类型 方法 说明
boolean createNewFile() 创建一个文件(路径中不存在才可以创建)
boolean delete() 删除文件或目录(目录下为空才可以删除,不为空的目录,需要一个一个子目录遍历进行删除)
boolean exists() 判断目录或文件是否存在
String  getName() 获取文件或目录的名称
String getParent() 获取文件的父目录路径
String getPath() 获取文件或目录的路径
boolean isFile() 是否是文件
boolean isDirectory() 是否是目录
long length() 返回文件的大小(字节数)
long lastModified() 返回文件上一次修改的时间
File[] listFiles() 返回目录的下一个子目录或者子文件
boolean mkdir() 创建一级目录
boolean mkdirs() 创建多级目录
boolean renameTo() 进行文件改名/移动(剪切,粘贴操作)

【应用如下】

 public static void main(String[] args) throws IOException {
        //文件路径相关函数
        File file1=new File("E:\\javacode\\20110312\\20110312.iml");
        System.out.println("文件名:"+file1.getName());
        System.out.println("文件路径:"+file1.getPath());
        System.out.println("文件的父目录:"+file1.getParent());
        System.out.println("文件的绝对路径:"+file1.getAbsolutePath());
        System.out.println("===============================");
        //创建文练习
        File file2=new File("E:\\练习\\创建的文件.txt");
        System.out.println("是否存在:"+ file2.exists());
        System.out.println("是否创建成功:"+file2.createNewFile());
        System.out.println("是否是文件目录:"+file2.isDirectory());
        System.out.println("是否是文件:"+file2.isFile());
        System.out.println("再次创建是否成功:"+file2.createNewFile());
        System.out.println("==================================");
        //删除文件练习
        File file3=new File("E:\\练习\\要删除的文件.txt");
        System.out.println("要删除的文件是否存在:"+file3.exists());
        System.out.println("创建需要删除的文件:"+file3.createNewFile());
        System.out.println("要删除的文件是否存在:"+file3.exists());
        System.out.println("删除要删除的文件:"+file3.delete());
        System.out.println("要删除的文件是否存在:"+file3.exists());
    }

三、文件内容读写(IO流)

io流

将数据从一个设备传输到另一个设备,就是io操作。

从不同的层面可以进行不同的划分:

(1)来源:文件io、网络io

(2)方向:输入流(读取数据)、输出流(写数据)

【System.in标准输入流;System.out标准输出流;System.error错误输出流】

1、InputStream

最顶级的输入流,所有真实使用的io流,都是它的子类。

返回类型 方法 说明
int read() 读取一个字节的数据,未读取到返回-1
int read(byte[] b) 最多读取b.length字节的数据到b中,返回实际读到的数量。未读取到返回-1
int read(byte[] b,int off,int len) 从off位置开始,最多读取len个字节,返回实际读到的数量,未读到返回-1
void close() 关闭字节流

只是一个抽象类,要使用需要具体的实现类。

FileputStream

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

利用Scanner进行字符读取:读写操作,都是阻塞式(我们学习的都是BIO:阻塞式IO)

【输入流可以嵌套其他输入流】

构造方法 说明
Scanner(InputStream source) 构造一个Scanner,产生从指定输入流产生的值
Scanner(InputStream source,String  charset) 使用charset进行输入的扫描)

比较常见的字符输入流:

BufferedReader→带Reader的都是字符输入流。

返回值 方法 说明
int read() 读取一个字符
int read(char[] cbuf,int off,int len) 从off位置开始读取len长度,读取到字符数组中
String readLine() 读取一行

2、OutputStream

输出流的顶级抽象类,所有使用的输出类都是它的子类。

返回值 方法 说明
void write(int b) 写一个字节
void write(byte[] bytes) 将bytes数组的数据写到输出流
void write(byte[] b,int off,int len) 从off位置开始,写len长度的数据到输出流
void close() 关闭字节流
void flush() 刷新缓存区,将数据刷新到硬盘

flush()函数:

I/O的速度是很慢的,大多的OutputStream为了减少设备操作的次数,写数据时会将数据暂时写入缓存区,直到缓存区慢之后才会真正写入到设备中,但可能会造成我们写的数据会遗留一部分在缓存区。需要在最后调用falsh,刷新到设备中。

FileOutputStream

 通过继承outStream的三个write方法,就可以写字节数据。

常见的输出流:

BufferedWriter:带Writer都是字符输出流

【要输入到字节流中,需要先使用字符字节转换流OutputStreamWriter

 PrintWriter:和BufferedWriter类似。

猜你喜欢

转载自blog.csdn.net/weixin_54342360/article/details/124779599