File 和 InputStream, OutputStream 的用法

一、File

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

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

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

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

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


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

File 概述

属性:

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

方法:

修饰符及返回
值类型
方法签名 说明
String getParent() 返回 File 对象的父目录文件路径
String getName() 返回 FIle 对象的纯文件名称
String getPath() 返回 File 对象的文件路径
String getAbsolutePath() 返回 File 对象的绝对路径
String getCanonicalPath() 返回 File 对象的修饰过的绝对路径
boolean exists() 判断 File 对象描述的文件是否真实存在
boolean isDirectory() 判断 File 对象代表的文件是否是一个目录
boolean isFile() 判断 File 对象代表的文件是否是一个普通文件
boolean createNewFile() 根据 File 对象,自动创建一个空文件。成功创建后返
回 true
boolean delete() 根据 File 对象,删除该文件。成功删除后返回 true
void deleteOnExit() 根据 File 对象,标注文件将被删除,删除动作会到
JVM 运行结束时才会进行
String[] list() 返回 File 对象代表的目录下的所有文件名
File[] listFiles() 返回 File 对象代表的目录下的所有文件,以 File 对象
表示
boolean mkdir() 创建 File 对象代表的目录
boolean mkdirs() 创建 File 对象代表的目录,如果必要,会创建中间目
boolean renameTo(File
dest)
进行文件改名,也可以视为我们平时的剪切、粘贴操
boolean canRead() 判断用户是否对文件有可读权限
boolean canWrite() 判断用户是否对文件有可写权限

在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 概述

方法:

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

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);
            }
        }
    }
}

例二:

File 和 InputStream, OutputStream 的用法_第1张图片
2.3 OutputStream 概述

方法:

修饰符及返

回值类型

方法签名 说明
void write(int b) 写入要给字节的数据
void write(byte[] b) 将 b 这个字符数组中的数据全部写入 os 中
int write(byte[] b, int off, int len) 将 b 这个字符数组中从 off 开始的数据写入 os 中,一共写 len 个
void close() 关闭字节流
void flush() 重要:我们知道 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 找到我们熟悉的方法
File 和 InputStream, OutputStream 的用法_第2张图片

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

使用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();
    }
}

你可能感兴趣的:(JavaEE,java,IO)