浅析理论:
一、IO概述(input/output) 1、输入输出流,字符字节流,字节流一般带Stream,字符流一般是Reader和Writer 2、所有文件都是二进制序列,在java中使用byte[]可以表示文件内容,其中文本文件内容可以用char[]表示 3、需要关闭流close() 二、四大顶层抽象类 1、InputStream字节输入流 int read();//读到末尾,返回-1 read(byte[] buff);//最多读取buff.length长度个 read(byte[] buff, int off, int len);//读取到的数据,第一个保存到buff[off]中,最多读取len个 2、OutputStream字节输出流 write(int b);//输出一个字节 write(byte[] buff);//批量输出字节,输出个数为buff.length write(byte[] buff, int off, int len);// 从buff[off]开始输出,输出长度为len 3、Reader int read(); int read(char[] cbuf); int read(char[] cbuf, int off, int len); //对于文本文件的读入一般是以行为单位 4、Writer void write(char[] cbuf); void writer(char[] cbuf, int off, int len); void writer(int a); void writer(String str); coud writer(String str, int off, int len); 三、各种实现类 1、InputStream FileInputStream ByteArrayInputStream ObjectInputStream 2、OutputStream FileOutputStream ByteArrayOutputStream ObjectOutputStream 3、Reader FileReader(x) *BufferedReader InputStreamReader 4、Writer *PrintWriter FileWriter(x) OutputStreamWriter 四、非文本文件,比如:图片、视频、exe文件等 文件内容一般使用byte[]表示,一般使用字节相关流来操作,比如FileInputStream、FileOutputStream,使用while循环 五、文本文件,比如:txt、html、xml 一般使用字符操作流,常用一行一行读取操作 文本文件的操作关键点是主意文件的字符编码 注:要使用和文件一样的字符编码读入,否则会出现乱码 1、读入:创建带缓冲的输入字符流【存在内存中】 FileInputStream fis = new FileInputStream("F:/a.txt"); InputStreamReader isr = new InputStreamReader(fis, "utf-8"); BufferedReader r = new BufferedReader(isr); 2、一行一行的读入 String line = null; while((line=r.readLine())!=null) { } 3、写入:创建BufferedWriter对象 FileOutputStream fos = new FileOutputStream("f:/a.txt", true);//true表示是否追加 OutputStreamWriter osw = OutputStreamWriter(fos, "utf-8"); BufferedWriter bw = BufferedWriter(osw); 4、一行一行的写入 bw.Write(String s); bw.newLine(); 六、读取控制台 System.in;
浅析案例:
package com.gongxy; import java.io.*; /** * @author gongyg * @date 2020/9/3 14:04 */ public class IOTest { public static void main(String[] args) throws Exception{ //copyPhotoMethod(); copyTextMethod(); } /* 复制图片 */ static void copyPhotoMethod() throws Exception{ //读入 FileInputStream fis = new FileInputStream("g:/测试/测试a/a.png"); //写入 FileOutputStream fos = new FileOutputStream("g:/测试/测试B/b.png"); int line; while((line = fis.read()) != -1){ fos.write(line); } fis.close(); fos.close(); } /* 复制文本文件 */ static void copyTextMethod() throws Exception{ //读入 FileInputStream fis = new FileInputStream("g:/测试/测试a/a.txt"); InputStreamReader isr = new InputStreamReader(fis, "utf-8"); BufferedReader br = new BufferedReader(isr); FileOutputStream fos = new FileOutputStream("g:/测试/测试B/b.txt"); OutputStreamWriter osw = new OutputStreamWriter(fos, "utf-8"); BufferedWriter bw = new BufferedWriter(osw); String line; while((line = br.readLine()) != null){ bw.write(line); bw.newLine(); } br.close(); bw.close(); } }