File类、 InputStream和 OutputStream的用法

目录

一、什么是File类

1.1 概念

1.2 File类常用方法

 二、 InputStream类和OutputStream类

2.1 概念

2.2 read方法

2.3 Writer方法


一、什么是File类

1.1 概念

在 java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象,也就是说,如果希望在程序中操作文件和目录,则都可以通过 File 类来完成。File 类定义了一些方法来操作文件,如新建、删除、重命名文件和目录等。File 类不能访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流。

File类常见属性:

修饰符及类型属性说明
static String
pathSeparactor
依赖于系统的路径分隔符, String 类型的表示
static char
pathSeparactor
依赖于系统的路径分隔符, char 类型的表示

File 类提供了如下三种形式构造方法:

  1. File(String path):如果 path 是实际存在的路径,则该 File 对象表示的是目录;如果 path 是文件名,则该 File 对象表示的是文件。
  2. File(String path, String name):path 是路径名,name 是文件名。
  3. File(File dir, String name):dir 是路径对象,name 是文件名。

1.2 File类常用方法

对应使用的如下:

(1)使用文件的获取功能

public static void main(String[] args) throws IOException {
//        new一个File对象,对File对象进行操作
        File file = new File("d:/cat.jpg");
        System.out.println(file.getParent());
        System.out.println(file.getName());
        System.out.println(file.getPath());
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalPath());
    }

运行结果:

(2)对于创建文件,删除文件、判断文件是否存在

public static void main(String[] args) throws IOException {
//        在相对路径中,./通常可以省略
        File file = new File("./hello_world.txt");
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());

        System.out.println("===============");
//        创建文件
        file.createNewFile();
        System.out.println(file.exists());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());

//        删除文件操作
        file.delete();
        System.out.print("删除文件之后:");
        System.out.println(file.exists());
    }

 运行结果:

(3)文件的重命名操作

  public static void main(String[] args) {
        File src = new File("./test222");
        File dest = new File("./test-dirs");
//        将目录重命名
        src.renameTo(dest);
    }

 运行结果:

(4)文件目录展示操作

//    文件目录展示操作
    public static void main(String[] args) {
        File file = new File("test-dir");
//         创建一级目录
//        file.mkdir();
//        创建多级目录
//        file.mkdirs();

        String[] result1 = file.list();
        System.out.println(Arrays.toString(result1));
        File[] result2 = file.listFiles();
        System.out.println(Arrays.toString(result2));
    }

运行结果:

 二、 InputStream类和OutputStream类

2.1 概念

InputStream和OutputStream类是一个抽象类,继承了Colseable接口。属于字节流的标准是输入输出操作。

public interface Closeable extends AutoCloseable 

并且由于Closeable接口拓展了AutoCloseable接口,使得InputStream及其子类都可以用于带资源的 try with resources 带有资源的try操作,会在try代码块结束,自动执行close操作。

2.2 read方法

public abstract int read() throws IOException;
  • 抽象方法、不提供实现、子类必须实现这个方法

从输入流读取数据的下一个字节,返回一个0-255范围内的int类型的数值。

如果到达了流的结尾会返回值-1

read()方法会一直阻塞,直到输入流可用、到达流的结尾或者引发异常

为什么返回的是int类型?

字节输入流可以操作任意类型的文件(比如图片、音频),这些文件底层都是二进制。如果每次读取都返回byte,就可能导致文件读取到一半就不读取了(例如:11111111是byte类型的-1)。使用int类型接收,会自动补足凑齐4个字节,byte类型的-1就会变成int类型的255,这样才可以保证数据的完整性。

如果返回char,因为char的取值范围是从0-65535。这个范围内所有字符都有可能会在数据中出现,那么就需要一个不可能出现在数据中的值来表示尾末流。

举例读取文本文件中的内容,并输出二进制数,代码如下:

public static void main(String[] args) throws IOException {
//        文件的打开操作
//        InputStream inputStream = null;
//        try {
//            inputStream = new FileInputStream("d:/test.txt");
//        }finally {
//            // 关闭操作
//            inputStream.close();
//        }

//        try with resources  带有资源的try操作,会在try代码块结束,自动执行close操作
        try (InputStream inputStream = new FileInputStream("d:/test.txt")){
//            读文件操作
            //无参数的read,相当于一次读一个字节  返回值类型为int
          while (true){
              int b =  inputStream.read();
              if (b == -1){
//                  读到末尾,结束
                  break;
              }
//              按照16进制打印
//              System.out.println(b);
              System.out.printf("%x\n",b);
          }
        }
    }

运行结果:

 

2.3 Write方法

OutputStream 同样只是一个抽象类,要使用还需要具体的实现类。我们现在还是只关心写入文件中, 所以使用 FileOutputStream。利用write方法进行写入。
具体实现代码如下:
 public static void main(String[] args) {
        try(OutputStream outputStream = new FileOutputStream("d:/test.txt")) {
            outputStream.write(97);
            outputStream.write(98);
            outputStream.write(99);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

运行结果:

将文本中原有的内容修改成添加的内容。

  read 和 write 还可以一次读写多个字节,使用byte[] 来表示 。

  read会尽可能把byte[]给填满,如果读到末尾,返回-1;

  write会把byte[]的所有数据都写入文件。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值