什么是输入/输出流
Java 程序通过流来完成输入/输出,所有的输入/输出以流的形式处理。因此要了解 I/O 系统,首先要理解输入/输出流的概念。
输入就是将数据从各种输入设备(包括文件、键盘等)中读取到内存中,输出则正好相反,是将数据写入到各种输出设备(比如文件、显示器、磁盘等)。例如键盘就是一个标准的输入设备,而显示器就是一个标准的输出设备,但是文件既可以作为输入设备,又可以作为输出设备。
数据流是 Java 进行 I/O 操作的对象,它按照不同的标准可以分为不同的类别。
- 按照流的方向主要分为输入流和输出流两大类。
- 数据流按照数据单位的不同分为字节流和字符流。
- 按照功能可以划分为节点流和处理流。
常用字节字符流流代码
文件字节流
//读取文件
File file=new File("./test.txt");
//输出流
OutputStream outputStream=new FileOutputStream(file,true);
outputStream.write("你好".getBytes());
outputStream.close();
//输入流,用bytes数组和stringBuilder接收
InputStream inputStream=new FileInputStream(file);
byte[] bytes=new byte[1024];
int length=0;
StringBuilder stringBuilder=new StringBuilder();
while((length=inputStream.read(bytes))!=-1){
stringBuilder.append(new String(bytes,0,length));
}
inputStream.close();
System.out.println(stringBuilder);
缓冲字节流
InputStream bufferedInputStream=new BufferedInputStream(new FileInputStream("./test.txt"));
byte[] bytes=new byte[1024];
int l=0;
StringBuffer stringBuffer=new StringBuffer();
while((l=bufferedInputStream.read(bytes))!=-1){
stringBuffer.append(new String(bytes,0,l));
}
bufferedInputStream.close();
System.out.println(stringBuffer);
字符流
OutputStreamWriter outputStreamWriter=new OutputStreamWriter(new FileOutputStream("./test.txt",true),"UTF-8");
outputStreamWriter.write("你好");
outputStreamWriter.close();
InputStreamReader inputStreamReader=new InputStreamReader(new FileInputStream("./test.txt"));
//字符数组接受,一次读取多少字符
char[] chars=new char[1024];
int length=0;
StringBuilder stringBuilder=new StringBuilder();
while((length=inputStreamReader.read(chars))!=-1){
stringBuilder.append(chars,0,length);
}
inputStreamReader.close();
System.out.println(stringBuilder);
文件字符流
FileWriter fileWriter=new FileWriter("./test.txt",true);
fileWriter.write("在吗");
fileWriter.close();
FileReader fileReader=new FileReader("./test.txt");
char[] chars=new char[1024];
int l=0;
StringBuilder stringBuilder=new StringBuilder();
while((l=fileReader.read(chars))!=-1){
stringBuilder.append(chars,0,l);
}
System.out.println(stringBuilder.toString());
字符缓冲流
BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter("./test.txt",true));
bufferedWriter.newLine();
bufferedWriter.write("你好");
bufferedWriter.close();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(new FileInputStream("./test.txt")));
String line;
StringBuilder stringBuilder=new StringBuilder();
//使用readline读取一行的数据
while((line=bufferedReader.readLine())!=null){
stringBuilder.append(line);
}
bufferedReader.close();
System.out.println(stringBuilder);