第1关:学习-Java输入输出之OutputStream类之字节数据输出
任务描述
本关任务:使用字节输出流将给定的字符串写入到给定的文件中。
相关知识
什么是 OutputStream 类
OutputStream 类是 Java 标准库提供的最基本的字节输出流。OutputStream 类也是抽象类,它是所有输出流的超类。
OutputStream 类的常用方法
- write()方法:这个方法会写入一个字节到输出流;
- close()方法:这个方法用于关闭输出流;
- flush()方法:这个方法是将缓冲区的内容真正输出到目的地。
OutputStream 类的常用子类
- FileOutputStream 类:用于将数据写入到输出流文件;
- ByteArrayOutputStream 类:在内存中模拟一个字节流输出。。
由于 OutputStream 类是抽象类,我们以它的子类 FileOutputStream 类为例,演示如何将数据写入到文件中。 将若干个字节写入文件流示例:
public static void main(String[] args) throws IOException{ // 抛出异常
// 创建FileOutputStream对象
OutputStream output = new FileOutputStream("C:\\Users\\yy\\Desktop\\a.txt");
// 写入字节
output.write(72); // 72代表H,以下类推
output.write(101); // e
output.write(108); // l
output.write(108); // l
output.write(111); // o
// 关闭流
output.close();
}
执行结果:在C:/Users/yy/Desktop
目录下的a.txt
文件中写入了 Hello 字符串。
每次写入一个字节非常麻烦,更常见的方法是一次性写入若干字节。这时,可以用 OutputStream 提供的重载方法 write(byte[]) 来实现:
public static void main(String[] args) throws IOException{
// 创建FileOutputStream对象
OutputStream output = new FileOutputStream("C:\\Users\\yy\\Desktop\\a.txt");
// 写入数据
output.write("Hello".getBytes("UTF-8")); // 将字符串通过getBytes()方法转换为字节数组
// 关闭流
output.close();
}
和 InputStream 类一样,上述代码没有考虑到在发生异常的情况下如何正确地关闭资源。写入过程也会经常发生 IO 错误,例如,磁盘已满,无权限写入等等。我们需要用 try(resource) 来保证 OutputStream 类在无论是否发生 IO 错误的时候,都能够正确地关闭:
public static void main(String[] args) throws IOException{
try{
// 创建FileOutputStream对象
OutputStream output = new FileOutputStream("C:\\Users\\yy\\Desktop\\a.txt");
// 写入数据
output.write("Hello".getBytes("UTF-8")); // 将字符串通过getBytes()方法转换为字节数组
} // 编译器在此自动为我们写入finally并调用close()
}
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,使用字节输出流将给定的字符串写入到给定的文件中,具体要求如下:
- 接收给定的一行字符串(如:hello,/test/a.txt。该字符串中含有两个元素,第一个为要输出到文件的字符串,第二个为文件路径);
- 使用字节输出流将给定的字符串输入到给定的文件中。
注意:字符串中的逗号为中文逗号。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
例: 测试输入:
hello,/test/a.txt
预期输出(后台查看给定文件中的内容产生的结果):
hello
开始你的任务吧,祝你成功!
源代码:
import java.io.*;
import java.util.Scanner;
public class FileTest {
public static void main(String[] args) throws IOException {
// 请在Begin-End间编写完整代码
/********** Begin **********/
// 接收给定字符串
Scanner input = new Scanner(System.in);
String str = input.next();
// 切割字符串
String[] array = str.split(",");
// 创建FileOutputStream对象
FileOutputStream fileOutputStream = new FileOutputStream(array[1]);
// 写入数据
fileOutputStream.write(array[0].getBytes());
fileOutputStream.close();
/********** End **********/
}
}