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

代码演示:

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是基于文件内容的,打开文件,读取内容,写入内容.

Java中,inputstreamoutputstream是常用于文件操作的Inputstream是用来读取文件数据的,Outputstream则是用来写入文件数据的。File则是用来表示文件或目录的抽象表示。 要实现inputstreamoutputstreamfile间的互转,需要使用Java IO中的一些方法。其中,FileInputStreamFileOutputStream用于将文件与inputstreamoutputstream进行互转换。FileReader和FileWriter用于将字符数据与inputstreamoutputstream进行互转换。另外,ByteArrayInputStream和ByteArrayOutputStream用于在内存中进行数据流操作。 以FileInputStreamFileOutputStream为例,可以通过以下步骤实现inputstreamfileoutputstream间的转换: 1.创建一个FileInputStream对象,将要读取的文件传递给构造函数。 2.通过read()方法读取文件中的数据。 3.创建一个FileOutputStream对象,将要写入的文件传递给构造函数。 4.通过write()方法将读取到的数据写入到输出流中。 以下是代码示例: ``` import java.io.*; public class FileOperation { public static void main(String args[]) { try { //创建一个输入流 FileInputStream in = new FileInputStream("input.txt"); // 读取第一个字节 int c = in.read(); while(c != -1) { System.out.print((char)c); //读取下一个字节 c = in.read(); } //关闭输入流 in.close(); //创建输出流 FileOutputStream out =new FileOutputStream("output.txt"); //写入数据 String str = "Hello Java Programming!"; byte[] bytes = str.getBytes(); out.write(bytes); //关闭输出流 out.close(); } catch (IOException e) { System.out.println("IOException"); } } } ``` 在上面的示例中,程序首先通过FileInputStream读取了一个文件的内容,然后通过FileOutputStream将读取到的内容写入到了另一个文件中。 总之,通过Java IO的各种操作,可以很方便地实现inputstreamoutputstreamfile间的互转。这些方法在读写文件、网络编程等方面都有广泛应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值