输入/输出这个概念,对于计算机相关专业的同学并不陌生,在计算中,输入/输出(Input / Output,缩写为 I / O)是信息处理系统(例如计算机))与外界(可能是人类或其他信息处理系统)之间的通信。输入是系统接收的信号或数据,输出是从系统发送的信号或数据。
一直以来,我们都在向屏幕输出内容以验证我们编写的代码逻辑。向屏幕输出内容非常简单,可以由以下两种方式来完成:
// 打印 Hello World,不换行
System.out.print("Hello World");
// 打印 Hello Java,并换行
System.out.println("Hello Java");
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();
}
}
Java 中最基本的输入/输入是使用流来完成的。
流是代表数据源和数据目标的对象,怎么理解这句话呢?简单来说,可以读取作为数据源的流,也可以写入作为数据目标的流。Java中的流是长度不确定的有序字节序列,它是一连串流动的字符,是以先进先出的方式发送信息的通道。
要实例化File对象,需要传入一个文件或目录的路径。
File 类提供了如下 4 个构造方法:
一. File(File parent, String child):从父抽象路径名和子路径名字符串创建新的文件实例;
二. File(String pathName):通过将给定的路径名字符串转换为抽象路径名,创建一个新的文件实例(最常用);
三. File(String parent, String child):从父路径名字符串和子路径名字符串创建新的文件实例;
四. File(URI uri):通过将给定的文件: URI转换为抽象路径名,创建一个新的文件实例。
在实例化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():返回此抽象路径名的规范路径名字符串。
OutPutStream抽象类是与InputStream对应的最基本的输出流,它是所有输出流的父类。
FileInputStream就是从文件流中读取数据,我新建一个文本文档Hello.txt,并输入如下内容:
读取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()方法来及时关闭。这样可以让系统释放资源。
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。
输入输出流经常用于上传文件到服务器的场景,要学会使用java.io.File类,InputStream和OutputStream分别是所有输入流和所有输出流的父类,
FileInputStream实现了文件流的输入,FileOutputStream实现了文件流的输出。