不积跬步,无以至千里;不积小流,无以成江海。
Java语言基础
输入输出流
按照流的方向分为输入流(InputStream)与输出流(OuputStream):
核心体系就是由File、 InputStream 、OutputStream、Reader、Writer和Serializable(接口)组成的。
因为程序是运行在内存中,以内存角度来理解输入输出概念,如下:
输入与输出是一个相对概念,数据写入文件,对于程序来说是输出流,对文件来说是输入流。
但一般是以程序作为中心,所以从程序写入数据到其他位置,则是输出流,将数据读入程序中则是输入流。
简单的说就是:读取数据就是输入流,写入数据就是输出流。
按照处理的数据单位分为字节流和字符流
IO流中的三类数据源
缓冲流:提供一个缓冲区,能够提高输入/输出的执行效率,减少同节点的频繁操作。
例如: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(); } } }
原文:https://www.cnblogs.com/smilexuezi/p/13551206.html