输入流
InputStream类是字节输入流的抽象类,是所有字节输入流的父类 (处理字节)
Reader类是字符输入流的抽象类,所有字符输入流的实现都是它的子类 (处理文本)
输出流
OutputStream类是字节输出流的抽象类,是所有字节输出流的父类 (处理字节)
Writer类是字符输出流的抽象类,所有字符输出流的实现都是它的子类 (处理文本)
总结几个常用数据流的用法
- 文件流
FileInputSteam 读取磁盘文件 相当于 new了一个磁盘文件
FileOutputSteam 输出文件 相当于把new好的文件 输出成磁盘文件
try {
//把磁盘文件写入FileInputStream
FileInputStream fileinput = new FileInputStream("读取文件路径");//;
FileOutputStream fileoutput = new FileOutputStream("写入文件路径");
//读取fStream
byte[] buffer = new byte[1024];
int n=0;
while ((n = fileinput.read(buffer)) != -1) {
//buffer就是读取的内容
//输出成磁盘文件
fileoutput.write(buffer, 0, n);
//ds.write(buffer, 0, length);
}
fileoutput.close();
fileinput.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
- 缓冲流
BufferedInputStream BufferedOutputStream
缓冲流是对流的操作的功能的加强,提高了数据的读写效率
try {
//通过缓存数据流输出其它流
BufferedInputStream in = new BufferedInputStream(new FileInputStream("读取流文件路径"), 1024);
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("输出流文件路径"), 1024);
int b=0;
//读写数据
while ((b = in.read()) != -1) {
out.write(b);
}
//刷新
out.flush();
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
- 数据输入输出流
DataInputStream 和 DataOutputStream
这两个流可以读写与机器无关的java数据,比较适用于网络数据传输
try {
// Data Stream写到输入流中
DataOutputStream dos = new DataOutputStream(new FileOutputStream("File.txt"));
dos.writeBytes("File"); //按2字节写入,都是写入的低位
dos.writeChars("File"); // 依照Unicode写入
// 依照UTF-8写入(UTF8变长,开头2字节是由writeUTF函数写入的长度信息。方便readUTF函数读取)
dos.writeUTF("File");
dos.flush();
dos.close();
// Data Stream 读取
DataInputStream dis = new DataInputStream(new FileInputStream("File.txt"));
// 读取字节
byte[] b = new byte[2];
dis.read(b);
System.out.println(new String(b, 0, 2));
// 读取字符
char[] c = new char[2];
for (int i = 0; i < 2; i++) {
c[i] = dis.readChar();
}
System.out.println(new String(c, 0, 2));
// 读取UTF
System.out.println(dis.readUTF());
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
- 字节流
InputStreamReader 和 OutputStreamWriter
字节流读取二进制文件,字符流读取文本文件 可以定义编码格式。
try {
StringBuffer inBld = new StringBuffer();
InputStreamReader reader = new InputStreamReader(new FileInputStream("读取文件路径"), "UTF-8");
int length = 1024;
char buffer[] = new char[length];
int count;
while ((count = reader.read(buffer, 0, length - 1)) > 0) {
inBld.append(buffer, 0, count);
}
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("写入文件路径"), "UTF-8"));
writer.write(inBld.toString());
writer.flush();
writer.close();
reader.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}