FIle,字符流,字节流

1.FIle相关方法及说明

static String pathSeparator 依赖于系统的路径分隔符,String 类型的表示

static char pathSeparator 依赖于系统的路径分隔符,char 类型的表示

签名 说明

File(File parent, String child) 根据父目录 + 孩子文件路径,创建一个新的 File 实例

File(String pathname) 根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者相对路径

File(String parent, String child)

String getParent() 返回 File 对象的父目录文件路径

String getName() 返回 FIle 对象的纯文件名称

String getPath() 返回 File 对象的文件路径

String getAbsolutePath() 返回 File 对象的绝对路径

String getCanonicalPath() 返回 File 对象的修饰过的绝对路径

boolean exists() 判断 File 对象描述的文件是否真实存在

boolean isDirectory() 判断 File 对象代表的文件是否是一个目录

boolean isFile() 判断 File 对象代表的文件是否是一个普通文件

boolean createNewFile() 根据 File 对象,自动创建一个空文件。成功创建后返回 true

boolean delete() 根据 File 对象,删除该文件。成功删除后返回 true

void deleteOnExit() 根据 File 对象,标注文件将被删除,删除动作会到JVM 运行结束时才会进行

String[] list() 返回 File 对象代表的目录下的所有文件名

File[] listFiles() 返回 File 对象代表的目录下的所有文件,以 File 对象表示

boolean mkdir() 创建 File 对象代表的目录

boolean mkdirs() 创建 File 对象代表的目录,如果必要,会创建中间目录

boolean renameTo(File dest) 进行文件改名,也可以视为我们平时的剪切、粘贴操作

boolean canRead() 判断用户是否对文件有可读权限

boolean canWrite() 判断用户是否有可写权限

2.文件内容的操作---流对象

标准库中提供的读写文件的流对象,不是一个两个类,而是有很多类。但是总的可以分为两大类

1.字节流(对应着二进制文件)

每次读写的最小单位是字节(8bit)

1.InputStream

2.OutputStream

和writer类似,OutputStream打开一个文件,默认就会清空文件的原有内容。而输入的数据,就会成为文件中新的数据。如果不想清楚,就可以用追加写的方式。

2.字符流(对应着文本文件)

每次读写的最小单位是字符(一个字符可能是对应多个字节)

一个字符到底对应几个字节?看当前的字符

GBK,一个中文字符->两个字节

UTF-8,一个中文字符->三个字节

本质上是针对字节流进行了又一层封,字符流就能自动地帮我们把文件中的几个相邻的字节转换成一个字符

:输入->读 输出->写 入CPU就叫输入,出CPU就叫输出

1.Reader

  • 无参数read:一次读取一个字符
  • 一个参数read:一次读取若干个字符,会把指定的cbuf数组给填满
  • 三个参数read:一次读取若干个字符,会把参数执行的cbuf数组中的,从offset到length这么长范围给填满
  • 一个文件读完了就要进行关闭,这就要用到read.close();其目的是为了释放文件描述符
  • 文件描述符
  • 是一个顺序表,一个进程里每打开一个文件就需要在这个表里分配一个元素,但是这个顺序表的空间是有上限的。如果只打开而不释放,等到顺序表满了,再打开文件就会出错。
import java.io.FileReader;
​
class Main {
  public static void main(String[] args) throws IOException {
    Reader reader = new FileReader("d:/test.txt");
    
while (true) {
      int c = reader.read();//无参read
      if(c == -1) {
        break;
     }
      char ch = (char)c;
      System.out.print(ch);
   }
​
    try{
      while (true) {
        char[] cbuf = new char[1024];
        int n = reader.read(cbuf);
        if(n == -1) {
          break;
       }
        System.out.println("n = " + n);
        for (int i = 0; i < n; i++) {
          System.out.print(cbuf[i]);
       }
     }
   }finally {
      reader.close();
   }//此种写法可以保证不管try中是异常还是正常值执行,都可以执行close
​
 }
}

2.Writer

import java.io.Writer;
class Main{
  public static void main(String[] args) {
    try(Writer writer = new FileWriter("d:/text.txt")) {
      writer.write("Hello world.");
   } catch (IOException e) {
      throw new RuntimeException(e);
   }
 }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值