不积跬步,无以至千里;不积小流,无以成江海。
Java语言基础
输入输出流
按照流的方向分为输入流(InputStream)与输出流(OuputStream):
- 输入流:只能读取数据,不能写入数据。
- 输出流:只能写入数据,不能读取数据。
核心体系就是由File、 InputStream 、OutputStream、Reader、Writer和Serializable(接口)组成的。
因为程序是运行在内存中,以内存角度来理解输入输出概念,如下:
输入与输出是一个相对概念,数据写入文件,对于程序来说是输出流,对文件来说是输入流。
但一般是以程序作为中心,所以从程序写入数据到其他位置,则是输出流,将数据读入程序中则是输入流。
简单的说就是:读取数据就是输入流,写入数据就是输出流。
按照处理的数据单位分为字节流和字符流
- 字节流:操作的数据单元是8位的字节。InputStream、OutputStream作为抽象基类。
- 字符流:操作的数据单元是字符。以Writer、Reader作为抽象基类。
- 字节流可以处理所有数据文件,若处理的是纯文本数据,建议使用字符流。
IO流中的三类数据源
- 基于磁盘文件:FileInputStream、FileOutputSteam、FileReader、FileWriter
- 基于内存:ByteArrayInputStream ByteArrayOutputStream(ps:字节数组都是在内存中产生)
- 基于网络:SocketInputStream、SocketOutputStream(ps:网络通信时传输数据)
缓冲流:提供一个缓冲区,能够提高输入/输出的执行效率,减少同节点的频繁操作。
例如:BufferedInputStream/BufferedOutputStream、BufferedReader/BufferWriter
转换流:将字节流转成字符流。字节流使用范围广,但字符流更方便。
例如:一个字节流的数据源是纯文本,转成字符流来处理会更好。InputStreamReader/OutputStreamWriter
字节流读写文件:
package file;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestDemo {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//创建文件(绝对路径)
File file = new File("D:\\Java_workspace\\Day_4\\src\\file\\a.txt");
if(!file.exists()) {
file.createNewFile();
}
//创建文件(相对路径)
File file1 = new File("c.txt");
if(!file1.exists()) {
file1.createNewFile();
}
//创建文件字节输入流
FileInputStream fileInputStream = new FileInputStream(file);
//创建文件字节输出流
FileOutputStream fileOutputStream = new FileOutputStream("D:\\Java_workspace\\Day_4\\src\\file\\b.txt");
//定义一个数组接受读取到的内容 长度最好是1024的倍数
byte[] bytes = new byte[1024];
//定义一个长度用来判断是否读取到最后一位,到最后一位返回-1
int len = 0;
//判断是否读取到最后一位
while((len = fileInputStream.read(bytes)) != -1) {
//将指定字节数组中从偏移量0开始的len个字节写入此文件输出流
fileOutputStream.write(bytes, 0, len);
}
System.out.println(file.getPath());
fileInputStream.close();
fileOutputStream.close();
}
}
字符流读写文件:
package file;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
public class TestDemo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file2 = new File("D:\\Java_workspace\\Day_4\\src\\file\\aa.txt");
//该缓冲流有一个readLine()独有方法
BufferedReader fileReader = null;
BufferedWriter fileWriter = null;
try {
fileReader = new BufferedReader(new InputStreamReader(new FileInputStream(file2), "UTF-8"));
fileWriter = new BufferedWriter(new FileWriter("D:\\Java_workspace\\Day_4\\src\\file\\bb.txt"));
String temp = "";
//readLine()每次读取一行
while((temp = fileReader.readLine()) != null) {
fileWriter.write(temp);
fileWriter.newLine();
System.out.println(temp);
}
fileReader.close();
fileWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
浙公网安备 33010602011771号