File 和 InputStream, OutputStream 的用法

本文详细介绍了Java中的File类,包括文件路径、权限以及File对象的相关操作。接着,文章深入讲解了InputStream和OutputStream,阐述了字节流在文件读写中的作用,并提到了常用的子类如FileInputStream和FileOutputStream。最后,文章讨论了字符流的使用,特别是Reader和Writer在文件读写中的应用。

一、File

首先我们要先了解文件路径:

文件路径分为 绝对路径 相对路径 两种。

绝对路径:相对于树来说就是,从根节点到叶子结点的整个路径。windows即是从各个磁盘                    下开始到目标文件的整个路径。

相对路径:可以从任意结点出发,到目标文件进行路径的描述,而这种描述方式就被称为相                    对路径。

文件的权限:读,写,执行


Java 中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述。注意,有 File 对象,并不
代表真实存在该文件。

File 概述

属性:

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

方法:

修饰符及返回
值类型
方法签名说明
StringgetParent()返回 File 对象的父目录文件路径
StringgetName()返回 FIle 对象的纯文件名称
StringgetPath()返回 File 对象的文件路径
StringgetAbsolutePath()返回 File 对象的绝对路径
StringgetCanonicalPath()返回 File 对象的修饰过的绝对路径
booleanexists()判断 File 对象描述的文件是否真实存在
booleanisDirectory()判断 File 对象代表的文件是否是一个目录
booleanisFile()判断 File 对象代表的文件是否是一个普通文件
booleancreateNewFile()根据 File 对象,自动创建一个空文件。成功创建后返
回 true
booleandelete()根据 File 对象,删除该文件。成功删除后返回 true
voiddeleteOnExit()根据 File 对象,标注文件将被删除,删除动作会到
JVM 运行结束时才会进行
String[]list()返回 File 对象代表的目录下的所有文件名
File[]listFiles()返回 File 对象代表的目录下的所有文件,以 File 对象
表示
booleanmkdir()创建 File 对象代表的目录
booleanmkdirs()创建 File 对象代表的目录,如果必要,会创建中间目
booleanrenameTo(File
dest)
进行文件改名,也可以视为我们平时的剪切、粘贴操
booleancanRead()判断用户是否对文件有可读权限
booleancanWrite()判断用户是否对文件有可写权限

在java中提供了一个File类通过这个类来完成文件系统的相关操作:

通过以上列出的这些方法,我们可以对文件进行各种操作。

1)列出目录中有哪些文件

2)创建文件

3)创建目录

4)删除文件

5)重命名文件

二、InputStream, OutputStream 的用法

2.1 文件内容的读写 —— 数据流

针对文件内容的读写,Java标准库提供了一组类~
首先按照文件的内容,分成了两个系列:
1)字节流对象,针对二进制文件,以字节为单位进行读写

  1. 读:InputStream
  2. 写:OutputStream

2)字符流对象,针对文本文件,是以字符为单位进行读写的

  1. 读:Reader
  2. 写:Writer

但是实际应用总中,上述这些都是抽象类 实际使用往往都需要他们的子类:FileInputStream、FileOutputStream、FileReader、FileWrite

2.2 InputStream 概述

方法:

修饰符及
返回值类
方法签名说明
intread()读取一个字节的数据,返回 -1 代表已经完全读完了
intread(byte[] b)最多读取 b.length 字节的数据到 b 中,返回实际读到的数
量;-1 代表以及读完了
intread(byte[] b,
int off, int len)
最多读取 len - off 字节的数据到 b 中,放在从 off 开始,返
回实际读到的数量;-1 代表以及读完了
voidclose()关闭字节流

FileInputStream 概述
构造方法:

签名说明
FileInputStream(File file)利用 File 构造文件输入流
FileInputStream(String name)利用文件路径构造文件输入流

例:

import java.io.*;
// 需要先在项目目录下准备好一个 hello.txt 的文件,里面填充 "Hello" 的内容
public class Main {
    public static void main(String[] args) throws IOException {
        try (InputStream is = new FileInputStream("hello.txt")) {
            while (true) {
                int b = is.read();
                if (b == -1) {
                    // 代表文件已经全部读完
                    break;
                }
                System.out.printf("%c", b);
            }
        }
    }
}

例二:


2.3 OutputStream 概述

方法:

修饰符及返

回值类型

方法签名说明
voidwrite(int b)写入要给字节的数据
voidwrite(byte[] b)将 b 这个字符数组中的数据全部写入 os 中
intwrite(byte[] b, int off, int len)将 b 这个字符数组中从 off 开始的数据写入 os 中,一共写 len 个
voidclose()关闭字节流
voidflush()重要:我们知道 I/O 的速度是很慢的,所以,大多的 OutputStream 为
了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的
一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写
入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的
数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,
调用 flush(刷新)操作,将数据刷到设备中

我们通常利用 OutputStreamWriter 进行字符写入

import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        try (OutputStream os = new FileOutputStream("output.txt")) {
            os.write('H');
            os.write('e');
            os.write('l');
            os.write('l');
            os.write('o');
            // 不要忘记 flush
            os.flush();
        }
    }
}

也可以利用 PrintWriter 找到我们熟悉的方法

 三、针对字符流对象进行读写操作

使用reader进行文件的读操作。

import java.io.*;
public class text {
    public static void main(String[] args) throws IOException {
      Reader reader=new FileReader("D:/xxx.txt");
      while (true) {
          char[] buffer= new char[1024];
          int len = reader.read(buffer);
          if (len == -1) {
              break;
          }
          for (int i = 0;i < len;i++) {
              System.out.println(buffer[i]);
          }
      }
    }
}

 使用write进行写操作

import java.io.*;
public class text {
    public static void main(String[] args) throws IOException {
        Writer writer=new FileWriter("D:/xxx.txt");
        writer.write("123456");
        writer.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值