✨个人主页: 不漫游-CSDN博客
目录
前言
流对象
InputStream
OutputStream
运用
在控制台进行输入并写入文件
进行普通文件的复制
前言
之前的文章文件操作与IO(上)已经介绍了文件系统的相关操作,这次的主角是文件内容的相关操作----通过流对象来实现。
流对象
在Java中,流对象用于处理输入和输出操作。流可以分为字节流和字符流两大类。
字节流适用于处理二进制数据,而字符流适用于处理文本数据。
而对文件内容的操作分为三大步:
1.打开文件。2.对文件进行操作。3.关闭文件。
InputStream
因为InputStream是一个抽象类(父类),我们现在只关⼼从⽂件中读取,所以使⽤FileInputStream(子类)。
package IO;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;public class demo3 {public static void main(String[] args) {try(InputStream inputStream=new FileInputStream("hello.txt")) {while(true){//一直读取int a=inputStream.read();//读取一个字节的数据if(a==-1){break;}System.out.printf("%c",a);}} catch (IOException e) {e.printStackTrace();}}
}
因为没有提供文件路径,所以运行之前要把文件放到项目的目录中去。
而且这里的try - catch模型可以实现自动关闭文件。
而这个a就相当于缓冲区,用于展示存储信息。
OutputStream
可以对文件进行写入,如图是相关的使用方法:
修饰符及返回值类型 | 方法签名 | 说明 |
---|---|---|
void | write(int b) | 写入一个字节的数据。参数 b 是一个整数,但实际上只使用其最低的 8 位(即一个字节)。 |
void | write(byte[] b) | 将 b 这个字节数组中的数据全部写入 OutputStream 中。 |
int | write(byte[] b, int off, int len) | 将 b 这个字节数组中从 off 开始的 len 个字节写入 OutputStream 中。返回实际写入的字节数。 |
void | close() | 关闭字节流。释放与此流相关的所有系统资源。 |
package IO;import java.io.*;public class demo3 {public static void main(String[] args) {try(OutputStream outputStream= new FileOutputStream("hello.txt")) {String data = "Hello!"; //要写入的数据byte[] bytes=data.getBytes();//将字符串转换为字节数组outputStream.write(bytes);//写入字节数组} catch (IOException e) {e.printStackTrace();}}
}
转成字节数组可以加入更多数据,所以没有直接添加。
注意,一般的write 会把原来文件内容删除在进行添加。
try(OutputStream outputStream= new FileOutputStream("hello.txt", true))
所以如果是追加的话, 记得写入第二个参数为append为true。
运用
在控制台进行输入并写入文件
这个和普通的输入很相似,只要把具体的数据用Scanner类对象代替即可~
package IO;import java.io.*;
import java.util.Scanner;public class demo3 {public static void main(String[] args) {Scanner scanner=new Scanner(System.in);System.out.println("请输入:");try(OutputStream outputStream= new FileOutputStream("hello.txt",true)) {String data = scanner.nextLine(); //要写入的数据byte[] bytes=data.getBytes();//将字符串转换为字节数组outputStream.write(bytes);//写入字节数组} catch (IOException e) {e.printStackTrace();}scanner.close();}
}
进行普通文件的复制
将源文件里的内容复制到目标文件中去:
可以采用之前InputStream进行读取源文件,
OutStream用来写入到目标文件。
package IO;import java.io.*;public class demo4 {public static void main(String[] args) {//源文件路径String sourcePath = "hello.txt";//目标文件路径String targetPath = "target.txt";try (InputStream f1 = new FileInputStream(sourcePath);OutputStream f2 = new FileOutputStream(targetPath)) {byte[] buffer = new byte[1024]; //采用字节流int bytesRead;while ((bytesRead = f1.read(buffer)) != -1) {f2.write(buffer, 0, bytesRead);}System.out.println("文件复制成功:" + targetPath);} catch (IOException e) {e.printStackTrace();}}
}
注意:将 bytesRead 的初始化放在 while 循环的条件中,是为了确保在每次循环开始时都读取数据 。不然可能会造成读取空数据。
看到最后,如果觉得文章写得还不错,希望可以给我点个小小的赞,您的支持是我更新的最大动力