Java字符流和字节流对文件操作的区别
记得当初自己刚开始学习Java的时候,对Java的IO流这一块特别不明白,所以写了这篇随笔希望能对刚开始学习Java的人有所帮助,也方便以后自己查询。Java的IO流分为字符流(Reader,Writer)和字节流(InputStream,OutputStream),字节流顾名思义字节流就是将文件的内容读取到字节数组,然后再输出到另一个文件中。而字符流操作的最小单位则是字符。可以先看一下IO流的概述:

下面首先是通过字符流对文件进行读取和写入:
package lib;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class Test {
// 定义文件路径
File f = new File("F:\\test.txt");
//字符流写入的方法
public String writeInFile() throws IOException{
String str = "";
String count = "";
try {
// 使用字符流对文件进行读取
BufferedReader bf = new BufferedReader(new FileReader(f));
while (true) {
//读取每一行数据并将其赋值给str
if ((count = bf.readLine()) != null) {
str += count;
} else {
break;
}
}
// 关闭流
bf.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return str;
}
//字符流读取的方法
public void getReader(){
try {
//其中true表示在原本文件内容的尾部添加,若不写则表示清空文件后再添加内容
PrintWriter pw=new PrintWriter(new FileWriter(f,true));
pw.write("测试输入字符串到文件中2");
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
Test test=new Test();
//将字符串输入到文件中
test.getReader();
//读取相对应的字符串
String str=test.writeInFile();
//将文件中内容在控制台输出
System.out.println("文件内容为:"+str);
}
}
上述代码的关键地方都有注释,就不再一一赘述了,主要就是在使用完流之后不要忘记关闭就好
然后是通过字节流的方式对文件进行操作,将一个文件中的内容复制到另一个文件中:
package com.file.test2;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestFile2 {
//使用字节流读取并写入文件,将一个文件复制到另一个文件中
public static void main(String[] args) throws IOException {
//要复制的源文件
File f=new File("D:\\test.txt");
//目标文件
File f2=new File("D:\\test2.txt");
//定义一个byte类型的数组,用于存储读取到的内容
byte [] b=new byte[1024];
int length;
try {
//定义读取的流
FileInputStream in=new FileInputStream(f);
//定义输出到文件的流
FileOutputStream out=new FileOutputStream(f2);
//将文件内容输出到另一个文件中
while((length=in.read(b))!=-1){
out.write(b, 0, length);
}
out.close();
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
在字节流的操作中,第13行的源文件必须存在,可以根据需要自行更改文件路径,只需要存在即可,否则会报文件找不到的错误,同时若想在控制台输出读取到的字节流的内容则可以在第27和28行之间加两句代码:in.read(b, 0, b.length);System.out.println(new String(b));
以上就是字符流和字节流的相关操作,其实代码不难,主要是自己的理解,相同的问题每个人都会有不同的理解方式,当然,对于我们编程人员来说,除了要多思考之外还要多动手。最后希望以上内容能对大家有所帮助,也请继续支持本站。
相关文章
spring boot自动装配之@ComponentScan注解用法详解
@ComponentScan的作用就是根据定义的扫描路径,把符合扫描规则的类装配到spring容器中,下面这篇文章主要给大家介绍了关于spring boot自动装配之@ComponentScan注解用法的相关资料,需要的朋友可以参考下2023-04-04
Java根据URL下载文件到本地的2种方式(大型文件与小型文件)
这篇文章主要给大家介绍了关于Java根据URL下载文件到本地的2种方式,分别是大型文件与小型文件,避免内存溢出OOM,文中通过代码介绍的非常详细,需要的朋友可以参考下2024-01-01
spring boot项目同时传递参数和文件的多种方式代码演示
这篇文章主要介绍了spring boot项目同时传递参数和文件的多种方式,在开发接口中,遇到了需要同时接收参数和文件的情况,可以有多种方式实现文件+参数的接收,这里基于spring boot 3 + vue 3 + axios,做一个简单的代码演示,需要的朋友可以参考下2023-06-06


最新评论