File 类和 InputStream, OutputStream 的用法

  • Post author:
  • Post category:其他



目录


1.文件系统操作


File 类


2.文件内容操作


InputStream


1.创建InputStream类对象


2.读文件


OutputStream


1.创建OutputStream类对象


2.写文件


上篇博客我们详情介绍了文件系统的相关知识。在文件系统操作中,由于文件是在硬盘上的,直接写代码不好操作,所以,我们通过创建File类对象,调用file类对象来间接访问硬盘上的文件。

1.文件系统操作

File 类

1、创建File类对象

  File file=new File("d:/xixi.jpg");

通过文件绝对/相对路径进行初始化。

2、File类常用方法:

代码演示:

public static void main(String[] args) throws IOException {
        //1.创建一个file类
        File file=new File("d:/xixi.jpg");
        /*
        File file=new File("d:/xigua/xixi.jpg");
        System.out.println(file.getName());//返回文件/目录名  xixi.jpg
        System.out.println(file.getParent());//返回父目录    d:/xigua
        System.out.println(file.getPath());//返回路径名字符串  d:/xigua/xixi.jpg
        System.out.println(file.getAbsolutePath());//返回绝对路径名字符串 d:/xigua/xixi.jpg
        System.out.println(file.getCanonicalPath());//返回规范路径名字符串D:/xigua/xixi.jpg*/ 
        System.out.println(file.exists());//文件是否存在 true
        System.out.println(file.isDirectory());//文件是否为目录 false
        System.out.println(file.isFile());//文件是否为普通文件 true
    }


2.文件内容操作

InputStream, OutputStream 类是处理二进制文件的,以字节流为基本单位。

  • InputStream

1.创建InputStream类对象

观察源码发现InputStream是一个抽象类,不能直接new对象。我们通过实例化它的子类FileInputStream来创建对象。

InputStream inputStream=null;
try {
    inputStream=new FileInputStream("d:/student.txt");
}finally {
    inputStream.close();
}

注意一定不要忘记最后的close操作。但是上述的代码可以进行优化的。在Java中,还存在try with resources 这个操作。它是带有资源的try操作,会在try代码块结束后,自动进行close关闭操作。

try(InputStream inputStream=new FileInputStream("d:/student.txt")){
}
指定一个要读的文件

这是由于InputStream实现了Closeable接口

2.读文件

首先,我们要读取的文件student.txt的内容为:

我们通过read()方法,while循环进行读取,当读到文件结尾是,结束,跳出循环。

try( InputStream inputStream=new FileInputStream("d:/student.txt")){
    while(true){
        int ret=inputStream.read();//无参相当于一次读一个字节
        if(ret==-1){
            break;
        }else{
            System.out.println(ret);//ascii码值 
                
        }
   }
}

结果:

按照ascii码表,可解析出数据为20201209004cjw.


如果是汉字的话:每个汉字三个字节(一个数字一个字节)。(utf-8)

将student.txt的内容修改成小曹,运行,发现结果:

我们通过网站查看utf-8字符编码,将上述读取的字节内容以16进制的格式打印。

System.out.printf("%x\n",ret);

查看结果:

与上述一个字节一个字节的读取对上了。

  • OutputStream

1.创建OutputStream类对象

 try {
      OutputStream outputStream=new FileOutputStream("d:/student2.txt");
 }catch (IOException e){
      e.printStackTrace();
}

2.写文件

 try {
      OutputStream outputStream=new FileOutputStream("d:/student2.txt");
      outputStream.write(97);
 }catch (IOException e){
      e.printStackTrace();
}

查看student2.txt:


注:read()可以一次读取一个字节或多个字节;write()也可以一次写一个字节或多个字节


File类是基于文件系统操作的,主要用于创建/删除文件,创建目录,判断当前是普通文件海还是目录,返回绝对/相对路径等等.InputStream和OutputStream是基于文件内容的,打开文件,读取内容,写入内容.



版权声明:本文为m0_71690645原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。