Java输入输出流

文章目录

  • 1.什么是输入和输出(I / O)
    • 1.1 基本概念
    • 1.2 最简单的输入输出流
    • 1.3 从键盘输入
  • 2.什么是流(Stream)
  • 3.File类
    • 3.1 实例化
    • 3.2 绝对路径和相对路径
  • 4.InputStream和OutputStream 抽象类
    • 4.1 FileInputStream从文件流中读取数据
    • 4.2 FileOutputStream向文件流中写入数据
  • 5.小结

1.什么是输入和输出(I / O)

1.1 基本概念

输入/输出这个概念,对于计算机相关专业的同学并不陌生,在计算中,输入/输出(Input / Output,缩写为 I / O)是信息处理系统(例如计算机))与外界(可能是人类或其他信息处理系统)之间的通信。输入是系统接收的信号或数据,输出是从系统发送的信号或数据。

1.2 最简单的输入输出流

一直以来,我们都在向屏幕输出内容以验证我们编写的代码逻辑。向屏幕输出内容非常简单,可以由以下两种方式来完成:

// 打印 Hello World,不换行
System.out.print("Hello World");

// 打印 Hello Java,并换行
System.out.println("Hello Java");

1.3 从键盘输入

java.util包下的Scanner类可用于获取用户从键盘输入的内容,我们在Java Scanner 类这一小节已经介绍过具体使用,实例如下:

import java.util.Scanner;

/**
 * @author colorful@TaleLin
 */
public class ScannerDemo {
    public static void main(String[] args) {
        // 创建扫描器对象
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入您的姓名:");
        // 可以将用户输入的内容扫描为字符串
        String name = scanner.nextLine();
        // 打印输出
        System.out.println("你好 ,".concat(name).concat(" 。"));
        // 关闭扫描器
        scanner.close();
    }
}

2.什么是流(Stream)

Java 中最基本的输入/输入是使用流来完成的。

流是代表数据源和数据目标的对象,怎么理解这句话呢?简单来说,可以读取作为数据源的流,也可以写入作为数据目标的流。Java中的流是长度不确定的有序字节序列,它是一连串流动的字符,是以先进先出的方式发送信息的通道。

3.File类

3.1 实例化

要实例化File对象,需要传入一个文件或目录的路径。

File 类提供了如下 4 个构造方法:

. File(File parent, String child):从父抽象路径名和子路径名字符串创建新的文件实例;
. File(String pathName):通过将给定的路径名字符串转换为抽象路径名,创建一个新的文件实例(最常用);
. File(String parent, String child):从父路径名字符串和子路径名字符串创建新的文件实例;
. File(URI uri):通过将给定的文件: URI转换为抽象路径名,创建一个新的文件实例。

3.2 绝对路径和相对路径

在实例化File对象时,既可以传入绝对路径,也可以传入相对路径。

绝对路径是以根目录开头的完整的全路径,上面代码实例中传入的是绝对路径,我们再来看看什么是相对路径,以及如何传入相对路径。

import java.io.File;
import java.io.IOException;

public class FileDemo2 {
   public static void main(String[] args) throws IOException {
       // 传入目录相对路径
       File dir = new File(".\\images");
       File imoocDir = new File("..\\demo");
       // 传入文件相对路径
       File file = new File(".\\Hello.java");
   }
}

上面代码的File构造方法中传入的就是相对路径,代码中的.表示当前目录,…表示上级目录。

File 对象下有 3 个表示路径的实例方法:

. String getPath():将抽象路径名转换为路径名字符串;
. String getAbsolute():返回此抽象路径名的绝对路径名字符串;
. String getCanonicalPath():返回此抽象路径名的规范路径名字符串。

4.InputStream和OutputStream 抽象类

OutPutStream抽象类是与InputStream对应的最基本的输出流,它是所有输出流的父类。

4.1 FileInputStream从文件流中读取数据

FileInputStream就是从文件流中读取数据,我新建一个文本文档Hello.txt,并输入如下内容:
Java输入输出流_第1张图片
读取Hello.txt文件中数据的实例代码如下:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputStreamDemo1 {

    public static void main(String[] args) throws IOException {
        // 实例化文件流
        FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Luss\\TestJa\\Hello.txt");
        for (;;) {
            int n = fileInputStream.read();
            if (n == -1) {
                // read() 方法返回-1 则跳出循环
                break;
            }
            // 将n强制转换为 char 类型
            System.out.print((char) n);
        }
        // 关闭文件流
        fileInputStream.close();
    }
}

如果我们打开了一个文件并进行操作,不要忘记使用close()方法来及时关闭。这样可以让系统释放资源。

4.2 FileOutputStream向文件流中写入数据

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamDemo1 {
    public static void main(String[] args) throws IOException {
        FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\Luss\\TestJa\\Hello.txt");
        // 写入 3 个H字符
        fileOutputStream.write(72);
        fileOutputStream.write(72);
        fileOutputStream.write(72);
        fileOutputStream.close();
    }
}

运行代码后,Hello.txt后面成功写入了 3 个字符H。

5.小结

输入输出流经常用于上传文件到服务器的场景,要学会使用java.io.File类,InputStream和OutputStream分别是所有输入流和所有输出流的父类,

FileInputStream实现了文件流的输入,FileOutputStream实现了文件流的输出。

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