Java ee 文件操作和IO
字节输入流
字节输入流通过FileInputStream实现对文件的读取操作。
通过文件路径来创建一个输出流,通过一个byte数组来接受读取到的文件内容,用read方法进行循环读取。当返回-1时则表示读取完成。关闭输入流。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Demo1 {
public static void main(String[] args) throws IOException {
//定义一个输入流
FileInputStream inputStream = new FileInputStream("D:/test/test1.txt");
//通过一个byte数组来接受读取到的文件内容
byte[] bytes = new byte[1024];//一次读1KB
//循环读取
while (true){
//返回数组的长度,也就是包含了多少个元素
int len = inputStream.read(bytes);//在read方法中对数组进行了修改,在方法外可以访问到修改过的内容,这类参数称为输出型参数。
//读取完成
if(len == -1){
break;
}
//打印数组中的内容
for (int i = 0; i < len; i++) {
System.out.println(bytes[i]);
}
}
//关闭流
inputStream.close();
}
}
字节输出流
字节输出流通过FileOutputStream来实现对文件的写入操作。
通过文件路径来创建一个输入流,用write方法以字节的形式写入文件,强制刷新缓冲区,让数据实时落盘,关闭输出流。
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo2 {
public static void main(String[] args) throws IOException {
// 通过文件路径创建一个输出流
FileOutputStream outputStream = new FileOutputStream("D:\\test\\test2.txt");
//写入内容到文件,以字节的形式写入文件
outputStream.write(97); //a
outputStream.write(98); //b
outputStream.write(99); //c
outputStream.write(13);
outputStream.write(10);
outputStream.write(-26);
outputStream.write(-120);
outputStream.write(-111);
//强制刷新缓冲区
outputStream.flush();
//关闭输出流
outputStream.close();
}
}
字符输入流
字符输入流通过创建FileReader来读取。
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Demo3 {
public static void main(String[] args) throws IOException {
// 创建一个字符输入流
FileReader fileReader = new FileReader("D:/test/test1.txt");
// 循环读取
while (true){
// 读取一个字符
int data = fileReader.read();
// 读取完成,达到退出条件
if(data == -1){
break;
}
// 打印结果,一个字符一个字符的打印
System.out.println(data);
}
// 关闭流
fileReader.close();
}
}
字符输入流
字符输出流通过创建FileWriter来写入字符。
import java.io.FileWriter;
import java.io.IOException;
public class Demo4 {
public static void main(String[] args) throws IOException {
// 定义一个字符输出流
FileWriter fileWriter = new FileWriter("D:/test/test2.txt");
// 写入具体的字符
fileWriter.write("hello world");
fileWriter.write("\n");
fileWriter.write("你好世界!");
// 强制刷新缓冲区
fileWriter.flush();
// 关闭流
fileWriter.close();
}
}
利用Scanner进行字符读取
直接使用InputStream进行读取是十分麻烦的,所以我们可以使用Scanner类来简化操作。
先创建一个输入流和Scanner对象,在创建Scanner对象时,在其构造方法中传入输出流对象以及指定的编码集。
循环读取时,通过判断Scanner对象是否还有下一行来判断是否读取完成。
最后进行打印,关闭Scanner和输入流。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
public class Demo5 {
public static void main(String[] args) throws IOException {
// 创建一个输入流
FileInputStream inputStream = new FileInputStream("D:/test/test1.txt");
// 借助Scanner来简化字符的读取操作
Scanner scanner = new Scanner(inputStream,"UTF-8");
// 循环读取
while (true){
// 是否还有下一行,如果没有下一行数据表示读取完成
if(!scanner.hasNextLine()){
break;
}
// 获取数据
String line = scanner.nextLine();
// 打印
System.out.println(line);
}
// 关闭Scanner和输入流
scanner.close();
inputStream.close();
}
}
利用PrintWriter来进行写入
对于写入操作,我们也能使用PrintWriter来简化操作。
先创建一个输出流和PrintWriter对象,将输出流对象传入PrintWriter中。
再通过PrintWriter来调用各种print方法来进行写入。
最后,不能忘记强制刷新缓冲区和关闭PrintWriter和输出流。
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
public class Demo6 {
public static void main(String[] args) throws IOException {
// 创建一个输出流
FileOutputStream fileOutputStream = new FileOutputStream("D:/test/test2.txt");
// 根据输出流,创建一个PrintWriter对象,用于写入字符串
PrintWriter printWriter = new PrintWriter(fileOutputStream);
// 写入内容
printWriter.println("Hello World");
printWriter.println("这是一个简便方法,你好世界!");
printWriter.printf("%s:%d","单价",5);
// 强制刷新缓冲区
printWriter.flush();
// 关闭资源
printWriter.close();
fileOutputStream.close();
}
}