java中的io主要由四个抽象类组成:
inputStream outputStream Reader Writer
这四个抽象类分别对应了输入和输出,字节流和字符流。
一般使用的时候是这样的 inputStream和outputStream对应的子类用来进行图片,视频等文件的处理,Reader和Writer用来进行字符流文件的处理,比如文本文件,尤其是文件中带有中文的。由于中文是占2个字节,如果使用inputStream读取的时候可能遇到读取乱码的情况,所以建议使用Reader和Writer。
下面是我写的两个例子,用来理解一下这四个抽象类。
例子1:使用Reader和Writer实现copy文本文件,同时读取除文本文件的内容。
package com.xueyou.demo.ioandnio;
import java.io.*;
public class IoReadWriterDemo {
private static final String FILE_NAME = "src/main/resources/abc.txt";
private static final String FILE_NAME2 = "src/main/resources/abc-copy.txt";
// private static final String FILE_NAME = "src/main/resources/aa.gif";
// private static final String FILE_NAME2 = "src/main/resources/aa-copy.gif";
private static final int BUFFER_SIZE = 2048;
public static void main(String[] args) throws IOException {
File f = new File(FILE_NAME);
File f2 = new File(FILE_NAME2);
FileReader fileReader = null;
FileWriter fileWriter = null;
char[] chars = new char[BUFFER_SIZE];
try {
fileReader = new FileReader(f);
fileWriter = new FileWriter(f2);
int len = 0;
StringBuffer sb = new StringBuffer();
while ((len = fileReader.read(chars)) != -1) {
fileWriter.write(chars, 0, len);
sb.append(chars, 0, len);
}
System.out.println(sb.toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (fileReader != null) {
fileReader.close();
}
if (fileWriter != null) {
fileWriter.close();
}
}
}
}
例子2:使用inputStream和outputStream来实现一个copy文件的功能。
package com.xueyou.demo.ioandnio;
import java.io.*;
public class IoStreamDemo {
private static final String FILE_NAME = "src/main/resources/abc.txt";
private static final String FILE_NAME2 = "src/main/resources/abc-copy.txt";
// private static final String FILE_NAME = "src/main/resources/aa.gif";
// private static final String FILE_NAME2 = "src/main/resources/aa-copy.gif";
// private static final String FILE_NAME = "http://static3.j.cn/img/dailySign/180907/2258/739558a6b2ae11e8.png";
// private static final String FILE_NAME2 = "src/main/resources/net-copy.png";
private static final int BUFFER_SIZE = 2048;
public static void main(String[] args) throws IOException {
File f = new File(FILE_NAME);
File f2 = new File(FILE_NAME2);
byte[] bytes = new byte[BUFFER_SIZE];
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
try {
fileInputStream = new FileInputStream(f);
fileOutputStream = new FileOutputStream(f2);
int len = 0;
int a = 0;
while ((len = fileInputStream.read(bytes)) != -1) {
System.out.println(++a);
fileOutputStream.write(bytes, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (fileInputStream != null) {
fileInputStream.close();
}
if (fileOutputStream != null) {
fileOutputStream.close();
}
}
}
}