File 类和 InputStream, OutputStream 的用法

目录

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类常用方法:

File 类和 InputStream, OutputStream 的用法_第1张图片

代码演示:

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来创建对象。

File 类和 InputStream, OutputStream 的用法_第2张图片

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的内容为:

File 类和 InputStream, OutputStream 的用法_第3张图片

我们通过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码值 
                
        }
   }
}

 结果:

File 类和 InputStream, OutputStream 的用法_第4张图片

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

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

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

File 类和 InputStream, OutputStream 的用法_第5张图片

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

File 类和 InputStream, OutputStream 的用法_第6张图片

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

查看结果:

File 类和 InputStream, OutputStream 的用法_第7张图片

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

  • 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:

File 类和 InputStream, OutputStream 的用法_第8张图片

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


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

你可能感兴趣的:(java,开发语言)