文件操作(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,可以是相对路径也可以是绝对路径

常用方法

返回值类型方法说明
booleancreateNewFile()创建一个文件(路径中不存在才可以创建)
booleandelete()删除文件或目录(目录下为空才可以删除,不为空的目录,需要一个一个子目录遍历进行删除)
booleanexists()判断目录或文件是否存在
String getName()获取文件或目录的名称
StringgetParent()获取文件的父目录路径
StringgetPath()获取文件或目录的路径
booleanisFile()是否是文件
booleanisDirectory()是否是目录
longlength()返回文件的大小(字节数)
longlastModified()返回文件上一次修改的时间
File[]listFiles()返回目录的下一个子目录或者子文件
booleanmkdir()创建一级目录
booleanmkdirs()创建多级目录
booleanrenameTo()进行文件改名/移动(剪切,粘贴操作)

【应用如下】

 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流,都是它的子类。

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

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

FileputStream

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

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

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

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

比较常见的字符输入流:

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

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

2、OutputStream

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

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

flush()函数:

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

FileOutputStream

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

常见的输出流:

BufferedWriter:带Writer都是字符输出流

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

 PrintWriter:和BufferedWriter类似。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢敲代码的大秃噜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值